- Yüz milyonlarca kullanıcıya hizmet veren bir şirkette (adı gizli), çekirdek sistemlerde C ve C++ kullanılıyor
- 2023 yılı boyunca Rust ile Zig arasında hangi dilin benimseneceğine dair tartışmalar yürütüldü
- Başlıca değerlendirme ölçütleri:
- C diliyle birlikte çalışabilirlik
- Mühendislik ölçeklenebilirliği (işe alım, bakım vb.)
- Nihai seçim: Zig
- Bu seçim sürecinin, büyük ölçekli şirketlerde "kodun çok çeşitli hedeflerde çalıştığı ve yüz milyonlarca kullanıcıyı etkilediği durumlarda hangi unsurların dikkate alındığını" iyi gösterdiğini düşündüğüm için paylaşıyorum
C ile birlikte çalışabilirliğin önemi
- Yeniden yazılması planlanan kütüphane, tüm platformlarda (web, mobil, VR headset'ler, oyun konsolları, masaüstü vb.) kullanılma ihtimali taşıyor
- Bu nedenle C API sunmak ve FFI üzerinden kullanımı desteklemek, tüm platformlarda çalışmayı garanti etmenin tek yolu
Başlıca tartışma başlıkları
Rust
- O dönemde Zig'den 25 kattan fazla daha popülerdi (anketler ve subreddit'ler baz alındığında)
- Daha uzun süredir kararlı durumda
- Rust Foundation'ın sektör desteği istikrarlı görünüyor
- Güçlü LSP ve geliştirici deneyimi
- Cargo: sektörün en iyi paket yöneticilerinden biri
- Bellek güvenliği ve "tanımsız davranış yok" iddiası (tam olarak doğru olmasa da tartışmada dile getirildi)
- C++'tan uzaklaşılmak isteniyorsa, bellek hataları ve tanımsız davranış olasılığı taşımayan Rust daha uygun
nightly sürümünde SIMD desteği
- WASM desteği Zig kadar sorunsuz
- Performans açısından Zig ile başa baş ya da bazı durumlarda "kayda değer ölçüde daha hızlı"
Rust'ın C ile birlikte çalışabilirliği:
- Rust'ın kendi ekosistemi zengin olduğu için C ile birlikte çalışabilirliğin önemi görece daha düşük
- Python binding'leri gibi yüksek seviyeli dillerle entegrasyon potansiyeli güçlü
- Rust kullanmanın avantajlarının, C binding'leri sunmanın dezavantajlarını dengelediği savunuldu
Zig
- C/C++ veya TypeScript geçmişi olan geliştiriciler tarafından kolay öğrenilebilir
- C kökenli geliştiricilere keyifli bir kodlama deneyimi sunar
- Zig derleyicisi C ve C++ da derleyebildiği için bağımlılık yönetimi ve C ABI kütüphaneleri oluşturma açısından avantajlıdır
- Çok çeşitli hedef platformları desteklemek son derece kolaydır (
zig targets komutu özellikle beğenildi)
- Hızlı yazılım geliştirmek kolaydır (yerleşik
Vector desteği, SIMD kullanımı vb.)
- Mevcut debugger'larla uyumludur
- Güçlü bir build sistemi vardır (mevcut Makefile'lara göre 100 kat iyileşme)
- Zig Software Foundation'ın mali şeffaflığı yüksektir
- Mevcut C++ kodunu kademeli olarak taşıma ve "Zig'leştirme" imkânı sunar
- Tüm hedef platformlar için linking/derleme sorunlarını çözme konusunda güven verir
Sonuç
- Zig, mevcut kod tabanını taşıma ve tüm platformlarla uyumluluğu garanti altına alma için gereken zaman ve çabayı büyük ölçüde azaltıyor
- Beklenmedik karar etkenleri:
- Öğrenme kolaylığı ve işe alım, beklenenden daha büyük etki yarattı (Zig lehine)
- Toolchain ile ilgili geliştirici deneyimi önemli rol oynadı
- Zig derleyicisi ve build sistemi, mevcut kod tabanıyla uyumluluğu sayesinde büyük katkı sağladı
- Rust'ın ekosistemi, topluluğu ve bellek güvenliği garantileri beklenenden daha az etkili oldu
10 yorum
Çok keyifli bir yazıydı, zevkle okudum!
node,bunvedenohakkında araştırma yaparken,bunınziggibi pek aşina olmadığım bir dille yazıldığını görüp bunun nasıl bir dil olduğunu merak etmiştim; güzel bir giriş olmuş, teşekkürler!Zig’deki büyük sorunlardan biri, derleme sırasında kullanıcının yazdığı kodda hata olduğunda bunun tam konumunu veya ayrıntılı bilgisini vermemesi. Görünüşe göre yalnızca standart kütüphaneye kadar gösteriyor.
Dikkat edilmesi gerekenler, tartışma konuları ve sonucu okuyunca, aslında baştan beri Rust gerektiren bir ortam olmadığı anlaşılıyor. Yemek teslimatı yaparken off-roader kullanan bir kurye gördünüz mü hiç?
Native bir dille geliştirme yapmak gerekiyor olabilir ama memory-critical bir iş değilse, geliştirmesi daha kolay olan tarafı seçmek doğru. Bunun için bir yıl boyunca tartışmaya da gerek yoktu doğrusu...
Yüz milyonlarca kullanıcıya hitap eden....
Hangi şirket olduğunu merak ediyorum. Kimlik doğrulama gibi biçimsel prosedürlere takılmayan bir şirket gibi görünüyor... kıskandım...
Yılda bir kez zig’e dönüp bakıyorum; neredeyse her yıl breaking change olmuş gibi görünüyor;;
Üstelik dilin kendisinde queue ya da thread’ler arası mesaj iletimi için hazır bir kütüphane de yok; bu yüzden Rust’ın olgunluğuyla kıyaslayınca hâlâ alınacak çok yolu var gibi görünüyor.
Elbette kullanıcı OS API’lerine çok hâkimse bu büyük bir sorun olmayabilir ama…
Rust, Zig'den 25 kattan fazla daha popüler ama işe alımda görünen o ki Zig daha avantajlı.
Sanırım bunun nedeni, 1. maddede belirtilen C/C++ veya TypeScript geçmişine sahip geliştiricilerin bunu kolayca öğrenebilmesi.
C geçmişine sahip geliştiricilere keyifli bir kodlama deneyimi sunuyor
Hızlı yazılım geliştirmeyi kolaylaştırıyor (yerel Vector desteği, SIMD kullanımı vb.)
Python'ı ilk kez öğrenirken hissettiğim duygu gibi
Bun’un Zig diliyle geliştirildiğini görünce neden özellikle Zig’i seçtiklerini merak etmiştim; ancak Rust ile yapılan iyi bir karşılaştırma yazısı sayesinde şimdi anlıyorum. Bununla birlikte, C dilinin gerçekten ölümsüz olacağı anlaşılıyor.