- 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 ความคิดเห็น
ความคิดเห็นบน Hacker News
#ifdefหรือขีดล่างจำนวนมาก กลับคิดว่านี่เป็นตัวอย่างที่ดีในการเรียนรู้สุนทรียะของภาษา C โดยเฉพาะการเขียนโค้ดทดสอบใน C แบบนี้เพิ่งเคยเห็นเป็นครั้งแรก เป็นงานที่ยอดเยี่ยม ตอนเป็นนักเรียนมัธยมต้นและมัธยมปลาย ฉันเรียนภาษาโปรแกรมภาษาแรกด้วย C และตอนติดตั้งซอฟต์แวร์ฟรีลงบนพีซีที่บ้าน ก็ได้รู้ว่าโปรแกรมส่วนใหญ่ถูกสร้างด้วย C ตอนเริ่มเรียนวิทยาการคอมพิวเตอร์ในมหาวิทยาลัยอย่างเป็นทางการ ฉันเรียนโครงสร้างข้อมูลและอัลกอริทึมด้วย C++ แต่เพราะเข้าใจพอยน์เตอร์อยู่แล้วจึงปรับตัวได้ง่าย พอหลีกเลี่ยงองค์ประกอบที่ซับซ้อนหลายอย่างออกไป ก็จะเห็นว่า C เป็นภาษาที่สะอาดและเรียบง่ายมาก แน่นอนว่าความน่าสนใจของ C คือการที่มันเปิดให้เข้าถึงความซับซ้อนนั้นได้โดยตรง แต่ฉันคิดว่าการรักษาสมดุลที่เหมาะสมเป็นเรื่องสำคัญsnprintf,mallocเป็นต้น นอกจากนี้ยังมีลูปที่ไม่ได้ใช้งานอยู่ด้วย ส่วนการประมวลผลแบบขนานดูเหมือนยังไม่รองรับ จึงอาจยังไม่เป็นปัญหาในตอนนี้ แต่ด้วยความที่เป็นเว็บเซิร์ฟเวอร์ การเพิ่ม threading ในอนาคตก็น่าจะเป็นประโยชน์ หากจะพิจารณาการใช้งาน แนะนำให้ใช้ไลบรารีอย่าง libuvโดยส่วนตัวฉันชอบความเรียบง่ายของ C ล้วน ๆ นะ แต่การเอาโค้ดเครือข่ายที่ AI เขียนมาผสมกับ C ก็ทำให้น่ากลัวอยู่เหมือนกัน
appRouteทำให้ประเภทและซิกเนเจอร์คลุมเครือ และเพิ่มชั้นการอ้อมที่ไม่จำเป็น ควรเอาออกน่าจะดีกว่า และชนิดAppContextเองก็ผสมหลายหน้าที่เข้าด้วยกัน ทั้ง App+HTTP Request+DB จึงน่าจะเหมาะกับชื่ออย่างRequestContextหรือControllerContextมากกว่า นอกนั้นก็เหมือนคนอื่น ๆ คือประทับใจกับความสะอาดของโค้ด และเป็นความพยายามที่ยอดเยี่ยมจริง ๆ