· kaynak Hacker News – Front Page (native)
Vermell: Linux epoll üzerine doğrudan inşa edilmiş, sıfır bağımlılıklı bir C++ web framework'ü
Hacker News'in ana sayfasına çıkan yeni açık kaynak C++ web framework'ü Vermell, tek bir statik kütüphane bağlıyor, üçüncü taraf event kütüphaneleri yerine doğrudan Linux epoll kullanıyor ve güçlendirilmiş varsayılanlarla geliyor.
Vermell nedir
Vermell, GitHub deposu üzerinden Hacker News ana sayfasına çıkan, modern C++ için yeni yayımlanmış açık kaynak bir web framework'üdür. Projenin README'sine göre bilinçli olarak küçüktür: dahil edilecek tek bir header, bağlanacak tek bir statik kütüphane ve bundan ibaret — runtime yok, garbage collector yok, framework'e özel DSL yok ve vendor edilmiş bağımlılık yok. Derlediğiniz kod ara katmanı olmayan sıradan bir C++ kodudur ve README, projeyi Vibe adlı eski bir framework'ün halefi olarak konumlandırıyor. Tüm dokümantasyon, İngilizce ve İspanyolca iki dilli bir kılavuz olarak vermell.cc adresinde barındırılıyor.
Worker pool'lu bir epoll döngüsü
Kaputun altında Vermell event-driven'dır. Non-blocking bir epoll döngüsü gelen istekleri okur ve işi worker thread havuzuna devreder. README, event loop tek bir bağlantıyı beklerken asla duraksamadığı için bu ayrımın sunucuyu yük altında hızlı ve yavaş istemcilere karşı dayanıklı tuttuğini söylüyor. Framework'ün tüm bağımlılık ayak izi temel Linux API'lerinden oluşuyor: socket'ler, epoll, pthreads ve fork/exec.
Bu tasarım Vermell'i yalnızca Linux'a özgü kılıyor. Epoll bir Linux çekirdek özelliği olduğundan macOS ve Windows açıkça desteklenmiyor; ancak README, C++20 g++ toolchain'ine sahip Linux türevi her şeyin derleyebileceğini söylüyor — x86_64 ve ARM donanımı, Raspberry Pi, container'lar, WSL, hatta Termux üzerinden Android.
Tek komutla derleme
Sistem geliştiricilerine yönelik vaat, derleme zamanı basitliği. Temel bir sunucu tek bir g++ çağrısıyla üretiliyor — g++ -std=c++20 server.cpp -o exe -lvermell — ekstra bayrak veya link sırası hokkabazlığı olmadan. Daha büyük projeler CMake kullanabilir; proje ayrıca bir npx scaffold'u, bir Docker imajı ve amd64, arm64 ile armhf'yi kapsayan, Debian ve Ubuntu için imzalı APT depoları dağıtıyor.
Minimal bir program bir Router oluşturur, router.get() ile bir handler kaydeder ve sonsuza dek bloke edip hizmet veren listen() fonksiyonunu çağırır; listenOne() varyantı tek bir isteği işleyip döner ve README bunu testler ile tek seferlik sunucular için öneriyor. Handler'lar bir Query referansı alıp void dönen sıradan C++ lambda'larıdır; dolayısıyla paylaşılan durum normal capture semantiğini izler. README bu konuya epey yer ayırıyor: by-copy capture'lar kayıt anında özel bir anlık görüntü üretir, by-reference capture'lar canlı bir görünüm verir ve sunucu durmadan önce ölen referans-capture'lı stack yerel değişkenleri sarkan (dangling) bir referans yaratır. Handler'lar worker thread'lerde eşzamanlı çalıştığından, paylaşılan değiştirilebilir durum bir mutex gerektirir.
Routing, JSON ve yapılandırma
Router her HTTP fiili için bir kayıt metodu ortaya koyar; nadir görülen LINK, UNLINK ve PURGE dahil. Statik route'lar bir hash map üzerinden O(1)'de dispatch edilir. /users/:id gibi path parametreleri desteklenir ve route grupları ayrı ayrı tanımlanıp router.use() ile mount edilebilir. İsimlendirmede bir C++ tuhaflığı var: delete fiili, delete ayrılmış bir anahtar kelime olduğundan deleteX() olarak kaydedilir.
JSON, ağaç içi (in-tree) katı bir RFC 8259 parser ve serializer ile, tipli parametreler, ham gövdeler ve multipart yüklemelerle birlikte ele alınıyor. compose() ve render() üzerine kurulu küçük bir şablonlama katmanı özellik setini tamamlıyor. Tüm ayarlar, designated initializer'larla tek bir configure() çağrısıyla geçilen tek bir Config struct'ında yaşıyor: listen backlog gibi ağ seçenekleri ve slowloris tarzı saldırılara karşı koruyan, parçalar arasında 30 saniyelik bir inactivity timeout ile toplam 60 saniyelik bir deadline gibi istek hattı seçenekleri. SO_REUSEPORT varsayılan olarak kapalı geliyor; README, aksi halde aynı UID'li bir sürecin portu bağlayıp trafiğin bir payını yakalayabileceğine dikkat çekiyor.
Varsayılan olarak güçlendirilmiş
README'ye göre güvenlik önlemleri opt-in değil, kutudan çıktığı gibi etkin: timeout'lar, istek sınırları, bağlantı limitleri ve sandbox'lanmış bir render ortamı ilk çalıştırmadan itibaren aktif. Bare-metal servis yazanları hedefleyen genç bir framework için bu varsayılanlar, özellik genişliğinden tartışmasız daha önemli.
Neden önemli
Günümüzde C++ web geliştirmenin çoğu ağır yığınlar üzerinden geçiyor — Boost.Asio üzerine katmanlanmış framework'ler veya paket yöneticileriyle çekilen event kütüphaneleri. Vermell'ın bahsi, sıfır harici bağımlılığın, tek header ve tek statik kütüphanenin engeli anlamlı biçimde düşürdüğü yönünde: vcpkg veya Conan kurulumu yok, bağımlılık çözümü yok, ABI derdi yok, sadece Linux üzerinde g++. Onun epoll döngüsü artı worker pool'u, yüksek performanslı üretim sunucularının mimarisini framework ölçeğinde uyguluyor; bu da onu Raspberry Pi, Termux ve minimal container'lar gibi gömülü hedefler için doğal bir seçim yapıyor.
Ödünleşmeler gerçek: macOS veya Windows'ta asla çalışmayacak ve bu kadar yeni bir proje her zamanki olgunluk riskini taşıyor. Ama Hacker News ilgisi, küçük, güçlendirilmiş, bağımlılıksız bir C++ HTTP yığını isteyen — ve şimdiye dek çoğunlukla kendisi inşa etmek zorunda kalmış — gerçek bir sistem geliştiricileri kitlesine işaret ediyor.
- #c-plus-plus
- #web-framework
- #open-source
- #linux
- #epoll