- Lavandula, modern web uygulamaları geliştirmek için tasarlanmış, C dili tabanlı hafif bir web framework’üdür
- Sezgisel ve hızlı bir geliştirme ortamı sunar; gereksiz özellikler olmadan üretkenlik ve performansa odaklanır
- Controller/routing sistemi, middleware pipeline, test framework’ü, SQLite/JSON kütüphaneleri gibi temel özelliklerin çoğunu içerir
- İleride ORM, session cookie, statik dosya sunumu, çeşitli veritabanı entegrasyonları gibi özelliklerin eklenmesi planlanmaktadır
- CLI tabanlı hızlı proje oluşturma, yerleşik unit test, environment variable ve logging desteği ile geliştirici kullanım kolaylığını en üst düzeye çıkarır
Lavandula: Hafif ve yüksek performanslı bir C web framework’üne genel bakış
- Lavandula, modern web uygulamalarını hızlı ve basit şekilde oluşturmak için tasarlanmış hafif bir C web framework’üdür
- Başlıca hedefleri sadelik, hız ve yüksek üretkenliktir; karmaşık özelliklerden çok gerçekten gerekli olanlara odaklanır ve ağır framework’lerin gereksiz yükünü azaltır
Temel özellikler ve faydaları
- C tabanlıdır ve minimum bağımlılık içerir
- Controller ve routing sistemi sunarak HTTP endpoint’lerini kolayca oluşturmayı sağlar
- GET, POST gibi HTTP metotlarını destekler ve yerel/global middleware pipeline içerir
- CLI aracı (
lavu) ile hızlı proje oluşturma ve çalıştırma desteklenir
- Yerleşik unit test framework’ü, environment variable yönetimi, logging, SQLite entegrasyonu ve JSON kütüphanesi dahildir
Şu anda tamamlanan özellikler
- Controller/routing sistemi
- HTTP metoduna göre endpoint desteği (GET, POST vb.)
- Middleware pipeline (yerel/global)
- Minimum bağımlılık (saf C kodu tabanlı)
- CLI ile kolay proje iskeleti oluşturma
- Yerleşik unit test framework’ü
- Environment variable desteği, logging sistemi
- SQLite/yerleşik JSON kütüphanesi entegrasyonu
Geliştirme aşamasındaki özellikler
- HTTP JSON body parsing
- Session cookie
- CORS politika ayarları
- Lavender ORM
- ELA (Embedded Lavandula) HTML template engine
Gelecek planları (roadmap)
- Rate limiting
- Statik dosya sunumu
- PostgreSQL, MySQL entegrasyonu
- Aday dependency injection framework’ü
- Kaydedilebilir endpoint/route listesi otomasyonu
- JSON model ve CRUD fonksiyonlarının otomatik oluşturulması (
lavu model komutu kullanılarak)
- URL parametre işleme ve dinamik routing
Proje oluşturma ve çalıştırma yöntemine genel bakış
- CLI komutu:
lavu new my-project ile proje klasörü ve temel yapı otomatik olarak oluşturulur
- Otomatik oluşturulan dosyalar:
- yapılandırma dosyası (lavandula.yml)
- ana/controller/route kaynak dosyaları
- makefile
- test kodları vb.
- Hızlı çalıştırma: klasöre geçtikten sonra
lavu run ile yerel sunucu doğrudan başlatılabilir, varsayılan port http://localhost:3000/
Lisans ve diğer bilgiler
- Lisans: MIT License
- Açık kaynak ruhuna uygun olarak herkes geliştirmeye katkı sağlayabilir ve katılabilir
- C (%97,3) tabanlı yazılmıştır; ayrıca bir miktar Makefile/Shell script içerir
Lavandula’nın sunduğu avantajların özeti
- C dili ekosisteminde oldukça nadir görülen tam teşekküllü bir web framework’ü olarak, kaynakların kısıtlı olduğu ortamlarda veya ultra hızlı sunucu geliştirmede çok başarılıdır
- Popüler framework’lere kıyasla daha yüksek hız ve daha düşük overhead için özelleştirilmiştir
- CLI, yerleşik araçlar ve minimal yapı sayesinde öğrenme eğrisi kısadır ve üretkenlik yüksektir
1 yorum
Hacker News görüşleri
#ifdefkoşulları ya da alt çizgiyle dolu büyük projelerle kıyaslandığında, bence C'nin estetik yönünü öğrenmek için daha iyi bir örnek. Özellikle C'de test kodunun bu şekilde yazıldığını ilk kez görüyorum, harika iş. Ortaokul ve lise yıllarımda ilk programlama dilim olarak C öğrenmiştim; evdeki PC'ye özgür yazılımlar kurarken çoğu programın C ile yazıldığını fark etmiştim. Üniversitede bilgisayar mühendisliğiyle ilk kez resmi olarak tanıştığımda veri yapıları ve algoritmaları C++ ile gördüm ama pointer'ları zaten anladığım için kolay uyum sağlamıştım. Birkaç karmaşık unsuru dışarıda bırakırsanız C'nin çok temiz ve sade bir dil olduğunu görebiliyorsunuz. Elbette o karmaşıklığa doğrudan erişebilmek de C'nin cazibesinin bir parçası, ama doğru denge önemli diye düşünüyorumsnprintf,mallocgibi çağrıların dönüş değerlerinin kontrol edilmediği pek çok yer var. Ayrıca burada bir kullanılmayan döngü da mevcut. Paralel işleme kısmı henüz desteklenmiyor gibi göründüğünden şu an acil bir sorun değil, ama bir web sunucusu söz konusu olduğundan ileride threading eklemek faydalı olacaktır. Bunu düşünürken libuv gibi bir kütüphane kullanmanızı öneririmKişisel olarak saf C'nin sadeliğini seviyorum ama yapay zekanın yazdığı C tabanlı ağ kodu kombinasyonu biraz ürkütücü geliyor
appRoutemakrosunun tipleri ve imzaları belirsizleştirdiğini ve gereksiz bir dolaylılık kattığını düşünüyorum, kaldırılması daha iyi olabilir. AyrıcaAppContexttipi gerçekte App + HTTP Request + DB gibi işlevleri bir araya getiriyor; bu yüzdenRequestContextveyaControllerContextgibi bir ad daha uygun olabilir. Bunun dışında diğerleri gibi ben de kodun temizliğine hayran kaldım; gerçekten etkileyici bir emek