Zig Libc projesi, C kaynak dosyalarını Zig standart kütüphane sarmalayıcılarıyla değiştirerek gereksiz kodu ortadan kaldırmayı hedefliyor. Geçtiğimiz ay boyunca birçok katkıda bulunan, bu projeye ilgi gösterdi. Amaç, memcpy veya atan2 gibi birebir eşleşen veya strnlen gibi genel bir fonksiyonu saran libc fonksiyonlarını, C kaynak dosyaları yerine Zig kodu olarak sunmak. Bu sayede, şu ana kadar Zig deposundan yaklaşık 250 C kaynak dosyası silindi ve 2032 dosya kaldı. Bu geçişle birlikte, Zig, üçüncü taraf projelerden ve C programlama dilinden bağımsızlığını artırıyor, derleme hızı iyileşiyor ve Zig'in kurulum boyutu küçülüyor. Ayrıca, libc'yi statik olarak bağlayan kullanıcı uygulamalarının ikili dosya boyutları da azalıyor.
Yakın zamanda yapılan bir geliştirme sayesinde, zig libc artık ayrı bir statik arşiv olmak yerine, diğer Zig koduyla aynı Zig Derleme Birimi'ni (ZCU) paylaşıyor. Bu, Zig'in entegre bir derleyici ve bağlayıcıya sahip olmasının avantajlarından biri. libc fonksiyonları ZCU'yu paylaştığında, fonksiyonlar birlikte optimize edilebildiği için gereksiz kod ortadan kalkıyor. Bu durum, libc sınırı boyunca Bağlantı Zamanı Optimizasyonu (LTO) etkinleştirmeye benziyor, ancak bağlayıcıda çok geç kalmak yerine, ön uçta daha doğru bir şekilde yapılıyor. Bu optimizasyonlar, genel sistem performansına ve uygulama boyutlarına olumlu katkı sağlıyor.
Ayrıca, bu çalışma yakın zamanda yapılan std.Io değişiklikleriyle birleştiğinde, kullanıcıların libc'nin G/Ç işlemlerini sorunsuz bir şekilde kontrol etme potansiyeli ortaya çıkıyor. Örneğin, read ve write çağrılarının tamamını bir io_uring olay döngüsüne dahil etmek mümkün olabilir, bu kod bu kullanım amacı düşünülmeden yazılmış olsa bile. Ya da üçüncü taraf C kodu için kaynak sızıntısı tespiti etkinleştirilebilir. Şimdilik bu sadece denenmemiş bir fikir, ancak oldukça ilgi çekici. libc-test projesi için Szabolcs Nagy'ye büyük teşekkürler, matematik fonksiyonlarında gerileme olmamasını sağlamada çok yardımcı oldu. Kullanıcılarımıza bir hatırlatma olarak, Zig artık statik libc sağlayıcısı olduğundan, musl, mingw-w64 veya wasi-libc işlevselliğiyle ilgili sorunlarla karşılaşırsanız, lütfen önce Zig'e hata raporu gönderin.
Zig'in kendi `libc` uygulamasını geliştirmesi, projenin C dilinden bağımsızlığını artırırken, derleme ve çalışma zamanı performansında önemli iyileştirmeler sağlıyor.