17 คะแนน โดย GN⁺ 2025-10-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Lavandula เป็น เว็บเฟรมเวิร์กน้ำหนักเบาที่สร้างบนภาษา C ซึ่งออกแบบมาสำหรับการพัฒนาเว็บแอปพลิเคชันสมัยใหม่
  • มอบ สภาพแวดล้อมการพัฒนาที่ตรงไปตรงมาและรวดเร็ว โดยเน้นที่ ประสิทธิภาพในการพัฒนาและสมรรถนะ โดยไม่มีฟีเจอร์ที่ไม่จำเป็น
  • มีฟังก์ชันสำคัญมาให้เกือบครบ เช่น ระบบคอนโทรลเลอร์/เรา ติง, middleware pipeline, test framework, ไลบรารี SQLite/JSON
  • ในอนาคตมีแผนขยายฟีเจอร์ เช่น ORM, session cookie, การเสิร์ฟไฟล์สแตติก, การเชื่อมต่อฐานข้อมูลหลากหลายประเภท
  • เพิ่มความสะดวกให้กับนักพัฒนาสูงสุดด้วย การสร้างโปรเจ็กต์อย่างรวดเร็วผ่าน CLI, unit test ในตัว, การรองรับ environment variables และ logging

Lavandula: ภาพรวมของเว็บเฟรมเวิร์ก C น้ำหนักเบาและสมรรถนะสูง

  • Lavandula คือ เว็บเฟรมเวิร์กภาษา C แบบน้ำหนักเบา ที่ออกแบบมาเพื่อให้สร้างเว็บแอปพลิเคชันสมัยใหม่ได้อย่างรวดเร็วและง่ายดาย
  • เป้าหมายหลักคือ ความเรียบง่าย ความเร็วสูง และผลิตภาพที่ดี โดยมุ่งเน้นเฉพาะสิ่งที่จำเป็นแทนฟีเจอร์ที่ซับซ้อน และลดความเทอะทะที่ไม่จำเป็นของเฟรมเวิร์กขนาดใหญ่

คุณสมบัติหลักและประโยชน์

  • สร้างบน C จึงมี dependency ต่ำที่สุดเท่าที่จำเป็น
  • มี ระบบคอนโทรลเลอร์และ routing ทำให้จัดโครงสร้าง HTTP endpoints ได้ง่าย
  • รองรับ HTTP methods เช่น GET, POST และมี local/global middleware pipeline
  • รองรับการสร้างและรันโปรเจ็กต์ได้อย่างรวดเร็วผ่าน CLI tool (lavu)
  • มี unit test framework ในตัว, การจัดการ environment variables, logging, การผสาน SQLite, และ ไลบรารี JSON มาให้

ฟีเจอร์ที่ทำเสร็จแล้วในปัจจุบัน

  • ระบบคอนโทรลเลอร์/เรา ติง
  • รองรับ endpoint แยกตาม HTTP method (GET, POST เป็นต้น)
  • middleware pipeline (local/global)
  • dependency ต่ำ (อิงจากโค้ด C ล้วน)
  • scaffolding โปรเจ็กต์ผ่าน CLI ได้สะดวก
  • unit test framework ในตัว
  • รองรับ environment variables, ระบบ logging
  • ผสาน SQLite/ไลบรารี JSON ในตัว

ฟีเจอร์ที่กำลังพัฒนา

  • การ parse HTTP JSON body
  • session cookie
  • การตั้งค่านโยบาย CORS
  • Lavender ORM
  • ELA (Embedded Lavandula) HTML template engine

แผนในอนาคต (Roadmap)

  • rate limiting
  • การเสิร์ฟไฟล์สแตติก
  • การเชื่อมต่อ PostgreSQL, MySQL
  • ตัวเลือกสำหรับ dependency injection framework
  • ระบบอัตโนมัติสำหรับรายการ endpoint/route ที่สามารถลงทะเบียนได้
  • การสร้าง JSON model และฟังก์ชัน CRUD อัตโนมัติ (ใช้คำสั่ง lavu model)
  • การจัดการ URL parameters และ dynamic routing

ภาพรวมวิธีสร้างและรันโปรเจ็กต์

  • คำสั่ง CLI: lavu new my-project จะสร้างโฟลเดอร์โปรเจ็กต์และโครงสร้างพื้นฐานให้อัตโนมัติ
  • ไฟล์ที่ถูกสร้างอัตโนมัติ:
    • ไฟล์ตั้งค่า (lavandula.yml)
    • ซอร์สหลัก/คอนโทรลเลอร์/เรา ต์
    • makefile
    • โค้ดทดสอบ เป็นต้น
  • การรันอย่างรวดเร็ว: ย้ายเข้าโฟลเดอร์แล้วใช้ lavu run เพื่อเปิด local server ได้ทันที โดยพอร์ตเริ่มต้นคือ http://localhost:3000/

ไลเซนส์และข้อมูลอื่น ๆ

  • ไลเซนส์: MIT License
  • สอดคล้องกับจิตวิญญาณของโอเพนซอร์ส ทุกคนสามารถปรับปรุงและมีส่วนร่วมได้
  • เขียนขึ้นด้วย C (97.3%) และมีบางส่วนเป็น Makefile/Shell script

สรุปข้อดีของ Lavandula

  • เป็น เว็บเฟรมเวิร์กที่สมบูรณ์ซึ่งหาได้ยากมากใน ecosystem ของภาษา C จึงโดดเด่นสำหรับสภาพแวดล้อมที่ทรัพยากรจำกัดหรือการสร้างเซิร์ฟเวอร์ความเร็วสูงมาก
  • เมื่อเทียบกับเฟรมเวิร์กยอดนิยม มีจุดเด่นที่ ความเร็วสูงกว่าและ overhead ต่ำกว่า
  • ด้วย CLI, เครื่องมือในตัว และโครงสร้างแบบมินิมอล ทำให้ เส้นโค้งการเรียนรู้สั้นและมีผลิตภาพสูง

1 ความคิดเห็น

 
GN⁺ 2025-10-10
ความคิดเห็นบน Hacker News
  • รู้สึกว่านี่เป็นโค้ด C ที่สะอาด ทันสมัย และสวยงามที่สุดชุดหนึ่งที่ได้เห็นในช่วงหลัง แม้โค้ดนี้จะไม่ใช่เคอร์เนล แต่เมื่อเทียบกับโปรเจ็กต์ขนาดใหญ่ที่เต็มไปด้วยเงื่อนไข #ifdef หรือขีดล่างจำนวนมาก กลับคิดว่านี่เป็นตัวอย่างที่ดีในการเรียนรู้สุนทรียะของภาษา C โดยเฉพาะการเขียนโค้ดทดสอบใน C แบบนี้เพิ่งเคยเห็นเป็นครั้งแรก เป็นงานที่ยอดเยี่ยม ตอนเป็นนักเรียนมัธยมต้นและมัธยมปลาย ฉันเรียนภาษาโปรแกรมภาษาแรกด้วย C และตอนติดตั้งซอฟต์แวร์ฟรีลงบนพีซีที่บ้าน ก็ได้รู้ว่าโปรแกรมส่วนใหญ่ถูกสร้างด้วย C ตอนเริ่มเรียนวิทยาการคอมพิวเตอร์ในมหาวิทยาลัยอย่างเป็นทางการ ฉันเรียนโครงสร้างข้อมูลและอัลกอริทึมด้วย C++ แต่เพราะเข้าใจพอยน์เตอร์อยู่แล้วจึงปรับตัวได้ง่าย พอหลีกเลี่ยงองค์ประกอบที่ซับซ้อนหลายอย่างออกไป ก็จะเห็นว่า C เป็นภาษาที่สะอาดและเรียบง่ายมาก แน่นอนว่าความน่าสนใจของ C คือการที่มันเปิดให้เข้าถึงความซับซ้อนนั้นได้โดยตรง แต่ฉันคิดว่าการรักษาสมดุลที่เหมาะสมเป็นเรื่องสำคัญ
    • มักได้ยินคนพูดว่าการเข้าใจพอยน์เตอร์เป็นเรื่องยาก แต่ไม่ค่อยแน่ใจว่ามันยากขนาดนั้นจริงหรือเปล่า จำได้ว่าตอนเรียนครั้งแรกใช้เวลาแค่ 15 นาทีพอจับทางได้คร่าว ๆ แน่นอนว่าการใช้ให้คล่องคงต้องใช้เวลามากกว่านั้น แต่ยังไม่ค่อยเข้าใจว่าทำไมพอยน์เตอร์ถึงถูกมองว่ามีความยากระดับตำนาน โปรเจ็กต์นี้ก็ดูยอดเยี่ยมเช่นกัน เพียงแต่อยากให้โปรเจ็กต์แบบนี้ที่ถูกใส่ไว้ในพอร์ตโฟลิโอของคนหางาน ไม่ถูกเก็บเข้า archive แล้วถูกลืมในเวลาไม่นาน
    • คำชมเรื่องโค้ดมีความหมายกับผมมากจริง ๆ ผมพยายามทุ่มเทอย่างมากเพื่อให้โค้ดออกมาเป็นแบบนั้นเสมอ ขอบคุณมากที่พูดแบบนี้
  • อยากให้หลีกเลี่ยงการวิจารณ์โปรเจ็กต์นี้แบบจริงจังเกินไป หรือการวิเคราะห์ไร้ความหมายทำนองว่า “จะมาแทน PHP ได้ไหม” ฉันคิดว่านี่เป็นตัวอย่างที่ยอดเยี่ยมของการลองทำสิ่งเจ๋ง ๆ ด้วยภาษา C ถ้ามี HTML template เพิ่มเข้ามา ก็น่าจะพัฒนาไปเป็นเฟรมเวิร์กที่สมบูรณ์ได้
    • ขอบคุณมากสำหรับคำพูดดี ๆ HTML template อยู่ในรายการลำดับความสำคัญแล้ว และตั้งใจว่าจะทำมันในภายหลังอย่างสนุก ๆ
    • ผมกำลังเรียน C เพื่อความสนุก และคิดว่าโปรเจ็กต์นี้เจ๋งมากจริง ๆ
  • โค้ดอ่านง่ายมากและจัดโครงสร้างได้ดีมาก แต่แทบไม่มี error checking เลย จึงมีหลายจุดที่ไม่ได้ตรวจสอบค่าที่ส่งกลับมาจาก snprintf, malloc เป็นต้น นอกจากนี้ยังมีลูปที่ไม่ได้ใช้งานอยู่ด้วย ส่วนการประมวลผลแบบขนานดูเหมือนยังไม่รองรับ จึงอาจยังไม่เป็นปัญหาในตอนนี้ แต่ด้วยความที่เป็นเว็บเซิร์ฟเวอร์ การเพิ่ม threading ในอนาคตก็น่าจะเป็นประโยชน์ หากจะพิจารณาการใช้งาน แนะนำให้ใช้ไลบรารีอย่าง libuv
    • ขอบคุณสำหรับฟีดแบ็กที่ใส่ใจมาก การประมวลผลแบบขนานเป็นสิ่งที่ตั้งใจจะเพิ่มทีหลังอยู่แล้ว จึงดีใจที่คุณพูดถึงมัน
  • ฉันเคยลองใช้เฟรมเวิร์กคล้ายกันชื่อ Jetzig แล้วสนุกมาก และมองโปรเจ็กต์นี้ในแง่ดีมากเช่นกัน ชอบการจับคู่ BSD C CGI กับ Postgres ด้วย ปกติฉันทำงานกับ Python เป็นหลัก แต่การได้สัมผัสภาษา low-level และแนวคิดเรื่องหน่วยความจำโดยตรงนั้นสนุกมากจริง ๆ แม้จะมีคนตั้งข้อสังเกตเรื่องความเป็นจริงในการใช้งาน แต่ยิ่งอุปกรณ์ embedded แพร่หลายมากขึ้น ฉันยิ่งคิดว่าเฟรมเวิร์กระดับล่างแบบนี้จะมีคุณค่ามากขึ้น ตอนนี้ก็ทดลองกับ pico calc อยู่ด้วย และถ้าจะทำ “แอปมือถือ” สำหรับมัน ฉันก็คงเขียนโค้ดเฟรมเวิร์กด้วย C เป็นงานที่ยอดเยี่ยม
  • ฉันคิดว่าโปรเจ็กต์นี้เจ๋งมาก การตั้งค่าก็อ่านเข้าใจง่าย และถ้าได้ใช้ประโยชน์จากประสิทธิภาพของ C ก็ถือว่าคุ้ม โดยเฉพาะอย่างยิ่งเมื่อใช้ AI อย่าง Claude ช่วยสร้างบางส่วนของเฟรมเวิร์กได้ง่าย ๆ ทำให้เติมเฉพาะสิ่งที่ต้องการเมื่อจำเป็น และสามารถประกอบเป็นเว็บเฟรมเวิร์กที่เบาและเป็นอิสระจากแพลตฟอร์มได้เอง คาดว่าประสิทธิภาพก็น่าจะออกมาดีมากด้วย
    • เช็กลิสต์ฝันร้ายด้านการบำรุงรักษา:
      • เว็บเฟรมเวิร์กบำรุงรักษายากตั้งแต่ต้นอยู่แล้ว เพราะมาตรฐานเปลี่ยนตลอดเวลา
      • ถ้าเป็นโค้ดที่ AI เขียน ก็อาจไม่มีใครรู้ชัดว่ามันทำงานอย่างไร
      • เขียนด้วย C
        โดยส่วนตัวฉันชอบความเรียบง่ายของ C ล้วน ๆ นะ แต่การเอาโค้ดเครือข่ายที่ AI เขียนมาผสมกับ C ก็ทำให้น่ากลัวอยู่เหมือนกัน
  • ฉันคิดว่าการเขียน HTTP parser ขึ้นมาเองตั้งแต่ศูนย์ด้วย C เป็นเรื่องที่เสี่ยงมาก เพราะอาจทำให้เกิดช่องโหว่มหาศาลได้ ดังนั้นถ้าจะสร้างเว็บเฟรมเวิร์กโดยคำนึงถึงการนำไปใช้งานจริง ก็ควรเริ่มจากไลบรารีที่ผ่านการพิสูจน์แล้วอย่าง libmicrohttpd, libevent_http, fastcgi จะปลอดภัยกว่า
    • เห็นด้วยกับคำเตือนแบบนี้มาก ถ้าอย่างนั้นก็อดสงสัยไม่ได้ว่าจริง ๆ แล้วจะสร้าง HTTP server ที่ปลอดภัยด้วย C ได้อย่างไร ฟังดูเหมือนเป็นหัวข้อหนังสือที่น่าสนใจมาก ถ้าแต่ละบทค่อย ๆ ชี้ให้เห็นช่องโหว่และอธิบายวิธีเชิงโครงสร้างในการพัฒนาไปสู่ไลบรารี HTTP ที่สุกงอม ก็น่าจะน่าสนใจมาก
    • ดูแล้วโปรเจ็กต์นี้คงไม่มีทางถูกนำไปใช้ใน production จริง แต่ถ้าเริ่มมีความคิดแบบนั้นขึ้นมา ก็อยากให้ล้มเลิกเสียเถอะ
  • นี่เป็นฟีดแบ็กที่ไม่ได้มีใครร้องขอ แต่ฉันคิดว่าแมโคร appRoute ทำให้ประเภทและซิกเนเจอร์คลุมเครือ และเพิ่มชั้นการอ้อมที่ไม่จำเป็น ควรเอาออกน่าจะดีกว่า และชนิด AppContext เองก็ผสมหลายหน้าที่เข้าด้วยกัน ทั้ง App+HTTP Request+DB จึงน่าจะเหมาะกับชื่ออย่าง RequestContext หรือ ControllerContext มากกว่า นอกนั้นก็เหมือนคนอื่น ๆ คือประทับใจกับความสะอาดของโค้ด และเป็นความพยายามที่ยอดเยี่ยมจริง ๆ
  • สิ่งนี้แสดงให้เห็นว่าการใช้แมโครช่วยให้ทำอะไรได้มากเพียงใด ในความเป็นจริง เว็บเฟรมเวิร์กสมัยใหม่เองก็ใช้เครื่องมือซับซ้อนอย่าง metaprogramming ของแต่ละภาษาอย่างจริงจังเช่นกัน ขอชื่นชมอย่างมากที่ลงมือสร้างมันขึ้นมาเอง เป็นงานที่ยากแต่ก็สนุกอย่างแน่นอน มีคนถามด้วยว่า “ทำไปทำไม” แต่ฉันคิดว่าไม่จำเป็นต้องมีเหตุผลอะไรเป็นพิเศษ เพราะมันคือการเพลิดเพลินกับการพัฒนาอย่างแท้จริง
    • ขอบคุณมากจริง ๆ และเห็นด้วยอย่างยิ่ง
  • หวังว่าบรรดาผู้ผลิตฮาร์ดแวร์จะรับโปรเจ็กต์นี้ไปใช้ เพื่อให้คุณภาพของหน้าเว็บสำหรับจัดการดีขึ้นอีกหน่อย
  • น่าประหลาดใจที่ทั้ง ๆ ที่เป็นโปรเจ็กต์ที่ไอเดียดีและเขียนอย่างตั้งใจ กลับมีปฏิกิริยาเชิงลบมากมาย ทักษะที่ Ashton สั่งสมจากครั้งนี้จะเป็นทรัพย์สินล้ำค่าที่จะไม่หายไปไหนในอนาคตแน่นอน
    • ขอบคุณมากจริง ๆ ที่มองมันแบบนั้น