
Zig: qurma sistemi yenidən işləndi — konfiqurasiya icradan ayrıldı
Zig devlogunda build.zig konfiqurasiyasını qurma qrafikinin icrasından ayıran geniş yenidən işləmə təsvir olunur. zig build -h vaxtı təxminən 90% azalıb, 0.17.0 versiyası isə həftələr içində gözlənilir.
Zig layihəsi qurma sistemində geniş dəyişiklik edib: qurmanı konfiqurasiya edən proses onu icra edən prosesdən ayrılıb. Dilin yaradıcısı Endryu Kelli bu qolu layihənin devlogunda qarşıdan gələn buraxılış qeydlərinin önizləməsi və Zig 0.17.0 çıxmadan dəyişikliyi sınamaq istəyənlər üçün erkən bildiriş kimi təsvir edir.
Configurer və maker
Əvvəllər build.zig faylları və qurma sisteminin tətbiqi Debug rejimində tək, şişirdilmiş prosesə kompilyasiya olunurdu; skript yaddaşda qurma qrafikini qurduqdan sonra onu build runner kodu icra edirdi. İndi skript kiçik prosesə — configurer-ə — kompilyasiya olunur və o da Debug rejimində işləyir. Qrafik hazır olduqda ikili konfiqurasiya faylına seriyalaşdırılır və ana zig build prosesi onu keşləyir. Bu zaman Zig qrafiki icra edən prosesi — maker-i — optimizasiyalarla asinxron kompilyasiya edir. Sonra maker seriyalaşdırılmış qrafiki icra edir.
Qlobal keş sayəsində maker hər Zig versiyası üçün yalnız bir dəfə kompilyasiya olunur. Ayrılmanın üç məqsədi var: hər dəyişiklikdə bütün qurma sistemi yerinə yalnız istifadəçinin build.zig məntiqi kompilyasiya olunur, bu isə --watch, --fuzz və --webui olduqda daha vacibdir; sistem heç nəyin dəyişməyəcəyini bildikdə skripti ümumiyyətlə yenidən işlətməyə bilər; və qrafiki icra edən proses optimizasiyalarla qurulur.
Ölçmələr: 150 ms-dən 14 ms-ə
Ölçülən effekt kəskindir. zig build -h əmri dəyişiklikdən əvvəl orta hesabla 150 ms, sonra isə 14,3 ms çəkdi — yəni divar saatı vaxtında təxminən 90,4% azalma. CPU dövrləri 95,9%, təlimatlar 95,6%, pik yaddaş isə 7,4% azaldı. Qazanc hər çağırışda qurma skriptini işlətmək yerinə keşlənmiş seriyalaşdırılmış konfiqurasiyanın təkrar istifadəsindən gəlir.
Nə pozulur, nə gəlir
Müəllif performansdan əlavə, ZLS kimi üçüncü tərəf alətlərinin build runner forkunu saxlamaq yerinə seriyalaşdırılmış konfiqurasiyanı oxumaqdan faydalanacağını gözləyir. Dəyişiklik daxili mexanizmləri ciddi şəkildə yenidən işləyir, amma API səviyyəsində əsasən uyğundur; istisnalar pull request-də sadalanır. Ən görünəni: qurma skriptləri artıq əmr sətri arqumentlərini b.args vasitəsilə oxuya bilmir və onları run_cmd.addPassthruArgs() ilə ötürür; bu bir imkanı götürür, lakin həmin arqumentlər dəyişdikdə skriptin yenidən kompilyasiyası tələb olunmur.
Zig 0.17.0 bir neçə həftə ərzində gözlənilir; düzəlişlər üçün 0.17.1-də də yer olacaq.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.