
Zig: derleme sistemi yeniden yazıldı — yapılandırma çalıştırmadan ayrıldı
Zig devlog'unda build.zig yapılandırmasını derleme grafiğinin çalıştırılmasından ayıran kapsamlı bir yeniden yazım anlatılıyor. zig build -h süresi yaklaşık %90 azaldı, 0.17.0 sürümü ise haftalar içinde bekleniyor.
Zig projesi derleme sisteminde kapsamlı bir değişikliği devreye aldı: derlemeyi yapılandıran süreç, onu çalıştıran süreçten ayrıldı. Dilin yaratıcısı Andrew Kelley, projenin devlog yazısında bu dalı yaklaşan sürüm notlarının bir önizlemesi ve Zig 0.17.0 çıkmadan değişikliği denemek isteyenler için erken bir bildirim olarak tanımlıyor.
Configurer ve maker
Önceden build.zig dosyaları ve derleme sisteminin uygulaması, Debug modunda tek ve şişkin bir sürece derleniyordu; betik bellekte bir derleme grafiği kurduktan sonra onu build runner kod parçası çalıştırıyordu. Artık betik küçük bir sürece — configurer — derleniyor ve bu süreç yine Debug modunda çalışıyor. Graf hazır olduğunda ikili bir yapılandırma dosyasına serileştiriliyor; ana zig build süreci bu dosyayı önbelleğe alıyor. Bu sırada Zig, grafiği yürüten süreci — maker — optimizasyonlarla eşzamansız olarak derliyor. Ardından maker, serileştirilmiş grafiği çalıştırıyor.
Küresel önbellek sayesinde maker her Zig sürümü için yalnızca bir kez derleniyor. Ayrımın üç amacı var: her değişiklikte tüm derleme sistemi yerine yalnızca kullanıcının build.zig mantığı derleniyor — --watch, --fuzz ve --webui varken bu daha da önemli; sistem hiçbir şeyin değişmeyeceğini bildiğinde betiği hiç yeniden çalıştırmıyor; ve grafiği yürüten süreç optimizasyonlarla derleniyor.
Kıyaslama: 150 ms'den 14 ms'e
Ölçülen etki çarpıcı. zig build -h komutu değişiklikten önce ortalama 150 ms, sonra 14,3 ms sürdü; yani duvar saati süresinde yaklaşık %90,4 azalma. CPU döngüleri %95,9, komutlar %95,6, en yüksek bellek kullanımı %7,4 azaldı. Kazanç, her çağrıda derleme betiğini çalıştırmak yerine önbellekteki serileştirilmiş yapılandırmanın yeniden kullanılmasından geliyor.
Ne bozuluyor, sırada ne var
Yazar, performansın yanı sıra ZLS gibi üçüncü taraf araçların build runner çatalını sürdürmek yerine serileştirilmiş yapılandırmayı okumaktan fayda sağlayacağını düşünüyor. Değişiklik iç mekanizmaları yoğun biçimde yeniden düzenliyor ancak API düzeyinde büyük ölçüde uyumlu; istisnalar pull request'te listeleniyor. En görünür olanı: derleme betikleri artık komut satırı argümanlarını b.args üzerinden okuyamıyor ve bunun yerine run_cmd.addPassthruArgs() ile iletiyor; bu bir yeteneği kaldırıyor ama bu argümanların değişmesi betiğin yeniden derlenmesini gerektirmiyor.
Zig 0.17.0 birkaç hafta içinde bekleniyor; düzeltmeler için 0.17.1'de de yer olacak.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.