17 puan yazan GN⁺ 2025-10-10 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-10-10
Hacker News görüşleri
  • Son zamanlarda gördüğüm C kodları arasında en temiz, modern ve güzel olanlardan biri olduğunu hissettim; bu kod çekirdek değil elbette, ama #ifdef koş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üyorum
    • Pointer'ları anlamanın zor olduğuna dair şeyi sık duyuyorum ama gerçekten o kadar zor mu emin değilim. İlk öğrendiğimde 15 dakikada kabaca mantığını kavradığımı hatırlıyorum. Tabii ustalaşmak daha uzun sürmüştür ama pointer'ların neden efsanevi bir zorluk seviyesinde görüldüğünü pek anlayamıyorum. Bu projenin de çok hoş olduğunu düşünüyorum; sadece böyle projelerin iş arayan birinin portföyüne girip sonra arşivlenerek unutulmasını istemem
    • Koda yaptığınız övgü benim için gerçekten çok şey ifade ediyor. Kodumu her zaman bu şekilde yazabilmek için çok emek veriyorum; böyle sözler duymak için minnettarım
  • Bu projeyi aşırı ciddiye alıp eleştirmesek ya da “PHP'nin yerini alır mı” gibi anlamsız analizlere girmesek iyi olur. Bence bu proje, C dilinde yapılmış harika bir denemenin çok iyi bir örneği. HTML şablonları eklenirse tam teşekküllü bir framework'e dönüşebilir gibi görünüyor
    • Güzel sözleriniz için çok teşekkürler. HTML şablonları öncelik listemde var ve ileride keyifle hayata geçirmeyi planlıyorum
    • Eğlenmek için C öğreniyorum ve bu projenin gerçekten harika olduğunu düşünüyorum
  • Kod çok okunaklı ve iyi düzenlenmiş. Ancak neredeyse hiç error checking yok; snprintf, malloc gibi ç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ı öneririm
    • Bu kadar özenli geri bildirim verdiğiniz için teşekkürler. Paralel işlemeyi daha sonra eklemeyi planlıyordum, bu yüzden bunu anmanız iyi oldu
  • Jetzig adlı benzer bir framework'ü keyifle denemiştim; bu projeyi de çok beğendim. BSD C CGI ve Postgres kombinasyonunu da seviyorum. Ağırlıklı olarak Python kullanıyorum ama düşük seviye dilleri ve bellek kavramlarını daha doğrudan deneyimlemek gerçekten çok eğlenceli. Gerçekçilik konusunda itiraz edenler var ama gömülü cihazlar daha da yaygınlaştıkça bu tür düşük seviye framework'lerin değerinin artacağını düşünüyorum. pico calc ile de deneyler yapıyorum; eğer onun için bir "mobil uygulama" yapacak olsaydım framework kodunu C ile yazardım. Harika iş
  • Bence bu proje gerçekten çok havalı. Kurulumun okunması kolay ve C performansından yararlanabiliyorsanız bu büyük bir artı. Özellikle Claude gibi bir yapay zeka ile framework'ün bazı kısımlarını kolayca üretip ihtiyaç oldukça gereken kadarını ekleyebilmek ve hafif, platformdan bağımsız bir web framework'ünü kendiniz kurabilmek önemli bir avantaj. Performans açısından da oldukça iyi sonuç vereceğini tahmin ediyorum
    • Bakım kabusu kontrol listesi:
      • Web framework'leri, sürekli değişen standartlar yüzünden zaten baştan zor bakım yapılır şeylerdir
      • Kod yapay zeka tarafından yazıldıysa, nasıl çalıştığını gerçekten kimse net biçimde bilmiyor olabilir
      • C ile yazılmıştır
        Kişisel olarak saf C'nin sadeliğini seviyorum ama yapay zekanın yazdığı C tabanlı ağ kodu kombinasyonu biraz ürkütücü geliyor
  • HTTP parser'ını C ile sıfırdan yazmanın çok tehlikeli olduğunu düşünüyorum. Büyük güvenlik açıklarına yol açabilir; bu yüzden gerçek dağıtımı hedefleyen bir web framework'ü yaparken libmicrohttpd, libevent_http, fastcgi gibi kendini kanıtlamış kütüphanelerden başlamak daha güvenli olur
    • Bu uyarıya fazlasıyla katılıyorum. O halde C ile güvenli bir HTTP sunucusu nasıl yapılabilir gerçekten merak ediyorum. Bence bu, çok ilginç bir kitap konusu olurdu; her bölümde güvenlik açıklarını ele alıp olgun bir HTTP kütüphanesine dönüşmenin yapısal yollarını anlatmak ilgi çekici olurdu
    • Gerçekte bu projenin üretim ortamında kullanılacağını sanmıyorum ama bir an böyle bir fikre kapılırsanız bundan vazgeçin derim
  • İstenmemiş bir geri bildirim olarak söylüyorum: appRoute makrosunun tipleri ve imzaları belirsizleştirdiğini ve gereksiz bir dolaylılık kattığını düşünüyorum, kaldırılması daha iyi olabilir. Ayrıca AppContext tipi gerçekte App + HTTP Request + DB gibi işlevleri bir araya getiriyor; bu yüzden RequestContext veya ControllerContext gibi bir ad daha uygun olabilir. Bunun dışında diğerleri gibi ben de kodun temizliğine hayran kaldım; gerçekten etkileyici bir emek
  • Makroların kullanımı sayesinde ne kadar çok şey yapılabildiğini gösteriyor. Aslında modern web framework'leri de her dilin metaprogramlama gibi karmaşık araçlarını yoğun biçimde kullanıyor. Bunu bizzat yapmış olmanızı özellikle takdir ediyorum; zor bir iş ama kesinlikle eğlenceli de. "Neden yaptın" diye soranlar da var ama bence ille de bir gerekçe gerekmiyor; insan bazen sırf geliştirme sürecinin kendisinden keyif aldığı için yapar
    • Çok teşekkür ederim, tamamen katılıyorum
  • Donanım üreticilerinin bu projeyi benimseyip yönetim web sayfalarının kalitesini biraz yükseltmesini umuyorum
  • Düşünülerek yazılmış, iyi fikirli bir proje olmasına rağmen bu kadar çok olumsuz tepki almasına şaşırdım. Ashton'ın bu süreçte kazandığı beceriler, gelecekte de kaybolmayacak çok değerli bir birikim
    • Bunu böyle değerlendirmenize gerçekten çok teşekkür ederim