Goose Programlama Dili: C++ ve Rust'ı Geçmeyi Vaat Eden Yeni Dil Hakkında Her Şey
Goose; yığın (heap) belleği, çöp toplayıcısı ve yaşam süresi ek açıklamaları olmayan yeni bir sistem dili. Geliştiricisi, deyimsel C++'tan 3 kat daha hızlı çalıştığını söylüyor. Nasıl çalışıyor ve denemeye değer mi?

Son haftalarda geliştiriciler arasında en çok konuşulan konulardan biri Goose programlama dili oldu. Dil; kıdemli bir programcı ve Lobster dilinin yaratıcısı olan Wouter van Oortmerssen tarafından geliştirildi. Apache 2.0 lisansıyla açık kaynaklı olarak sunulan Goose'un en dikkat çekici yanı ise yazarının belirttiğine göre derleyicinin, insan tasarımı bir dil şartnamesinden yola çıkılarak neredeyse tamamen yapay zeka ile üretilmiş olması.
Temel fikir: yığın (heap) bellek yok
Çoğu dilde diziler ve dizeler gibi dinamik veriler yığın bellekte yaşar ve bunları yönetmek için çöp toplayıcıya (Java, Go), referans sayımına (Swift) ya da yaşam süresi kurallarına (Rust) ihtiyaç duyulur. Goose bunların hiçbirini kullanmaz. Belgelerine göre, her dinamik değer derleyici tarafından yönetilen veri yığınlarında (stack) yaşar.
- Her yığın, basit bir artırımlı işaretçiye (bump pointer) sahip büyük bir adres alanı rezervasyonudur (varsayılan olarak 2 GB)
- Her yığında aynı anda yalnızca yeniden boyutlandırılabilir tek bir değer etkindir ve bu değer her zaman en üsttedir
- Bir diziyi büyütmek yalnızca işaretçiyi ilerletir — hiçbir şey taşınmaz
- Kapsam (scope) çıkışında belleği serbest bırakmak tek bir depolama işlemidir
Derleyici bu kuralları derleme zamanında kanıtlar; çalışma zamanında ise yalnızca artırımlı işaretçiler takip edilir.
Güvenlik nasıl çalışıyor?
Her referansın statik bir "kökü" vardır — yani ömrünü sınırlayan değişken. Derleyici kökleri kendi kendine çıkarır ve sahibinden daha uzun süre yaşayacak referansları reddeder. Rust'tan farklı olarak programcılar hiçbir yaşam süresi ek açıklaması yazmaz ve "unsafe" (güvensiz) bloklar yoktur.
Sözdiziminden bir tat
Goose, C benzeri kompakt bir sözdizimine sahiptir. Değişken boyutlu verilere sahip bir yapı şu şekilde tanımlanır: struct Item { sku: u8[varint], qty: varint, cents: varint }. Üç tür dizi vardır: sabit boyutlu, yalnızca büyüyen ve büyüyüp küçülen.
Hız: yazarın paylaştığı rakamlar
Yazar, 16 kıyaslama (benchmark) üzerinden elde edilen sonuçları yayınladı (geometrik ortalama). Bunlara göre Goose:
- deyimsel C++'tan yaklaşık 3,3–3,5 kat daha hızlı
- elle optimize edilmiş C++'tan 1,16–1,26 kat daha hızlı
- en iyi güvenli Rust'tan 1,12–1,19 kat daha hızlı
- 1,2–1,9 kat daha az bellek kullanıyor
Örneğin Goose'da bir sipariş kaydı 29 bayt yer kaplar ve sıfır tahsis (allocation) gerektirirken, bu rakam C++'ta 160 bayt ve 1 tahsis, Rust'ta ise 153 bayt ve 4 tahristir. Bunların yazarın kendi kıyaslama testleri olduğunu, bağımsız doğrulamaların hâlâ sınırlı olduğunu unutmamak gerekir.
Sınırlamalar
- Özyinelemeli (recursive) fonksiyonlar, bir özyineleme çağrısı boyunca büyütülebilir verileri tutamaz
- Kapsam dışına kaçan (escaping) kapanışlar (closures) veya fonksiyon işaretçileri yok
- Yalnızca tüm programı kapsayan derleme (whole-program compilation)
- Kütüphane ekosistemi hala çok küçük
Nasıl denenir?
Windows x64, Linux x64 ve macOS (Apple silikon ve Intel) için önceden derlenmiş sürümler mevcut. Goose tek bir C dosyasına derlenir, bu nedenle bir C derleyicisinin çalıştığı her yerde çalışır. GitHub üzerindeki aardappel/goose sayfasından bir sürüm indirin, klasörü PATH'inize ekleyin ve goose samples/01_tour.goose komutuyla örnek bir dosyayı çalıştırın. Arşivin içinde bir VS Code eklentisi de yer almaktadır.
Sonuç
Goose, bellek yönetimine yepyeni bir yaklaşım getiren büyüleyici bir deney. Performansa önem veren sistem programcıları bu dili takip etmeli ve bir şans vermelidir. Ancak dil henüz çok yeni: prodüksiyon ortamında kullanım için bağımsız kıyaslamaları ve daha geniş bir ekosistemi beklemek akıllıca olacaktır.
Kaynak: Goose (aardappel)



