Zig programlama dilini benzersiz kılan nedir?
(erikexplores.substack.com)- Uzmanlar, "derleme zamanında çalıştırılabilen kod" fikrinin "aptalca bir fikir" olduğunu söylemişti, ancak Zig'in yaratıcısı Andrew Kelley yoluna devam edip bunu hayata geçirdi
- Birkaç yıl sonra bu, Zig'in en güçlü özelliklerinden biri haline geldi
- Zig'de
comptimedenen şey, derleme zamanında çalıştırılması gereken koddur- Zig geliştiricileri, derleme sırasında Zig kodu çalıştırabilme özelliğini kullanarak jenerik/şablon desteği olmadan da jenerik kod yazabiliyor ve metaprogramlama yapabiliyor
2 yorum
Daha ilk paragraftan bir sorun var... Programlama dilleri tarafında derleme zamanı hesaplaması, sözde çok aşamalı programlama olarak adlandırılır ve meta programlamayı gerçekleştirmenin yöntemlerinden biridir. Hiç de aptalca bir fikir değildir.
C++ gibi çok aşamalı programlamayı bir şekilde uygulamış dillerde, her aşamada (bu durumda derleme zamanı ve çalışma zamanı) kodun dramatik biçimde farklılaşması gibi bir sorun ortaya çıkar (C++ artık
constexpr'e sahip ama hâlâ orası burası eksik), buna karşılık Zig dili en başından çok aşamalı programlama gözetilerek tasarlandığı için derleme zamanı ile çalışma zamanında neredeyse aynı kodu yazabilme avantajına ve derleme zamanında öngörülebilecek şeylerin pek az olması dezavantajına aynı anda sahip olmuştur.Yani... kaçınılmaz
unittestile önce derleme sırasında çalıştırıp,runtime error olabilecek şeyleri compile error aşamasına çekiyor... diye anlamak mümkün gibi görünüyor.
Kabaca belgelere ve soru-cevaplara baktığımda, C’nin yerine drop-in olarak geçebilmesi de oldukça çekici görünüyor. Rust’tan farklı olarak sözdiziminin basit olması da güzel. Elbette Rust kadar güvenli olmayacaktır ama... Rust kullanırken hissedilen overengineering duygusunu biraz daha az verecekmiş gibi. Go da yine bir karşılaştırma noktası olarak anılıyor; sonuçta runtime’ı olmayan Zig’in daha az yük getirdiği durumlar da olacaktır. Özellikle daha düşük seviyeye inildiğinde ya da çok fazla isteği işleme gereği olmayan durumlarda, Go’ya göre daha çok elin gidebileceği bir seçenek olabilir...
Bu yüzden Rust ile Go arasında kendini iyi konumlandırabilirse, beklenmedik şekilde oldukça iyi bir tercih olabilir diye düşünüyorum.