Geri qayıt
Roc-un Rust-dan Zig-ə kompilyator köçürülməsi 487 gündə funksional bərabərliyə çatdı
SiTech AI Team2 წთ. საკითხავი

Roc-un Rust-dan Zig-ə kompilyator köçürülməsi 487 gündə funksional bərabərliyə çatdı

Roc proqramlaşdırma dilinin komandası 300 000 sətirlik kompilyatoru Rust-dan Zig-ə köçürüb və 487 gündə orijinal kompilyatorla funksional bərabərliyə çatıb. Yazıda yığım müddəti, yaddaş təhlükəsizliyi və ekosistem uyğunluğu müqayisə olunur.

Roc proqramlaşdırma dili üzərində işləyən komanda son bir il yarımdə təxminən 300 000 sətir Rust kodunu Zig-ə köçürüb və artıq orijinal kompilyatorla funksional bərabərliyə çatıb. Bu rəsmi buraxılış deyil — Roc-un ilk nömrələnmiş versiyası olan 0.1.0 ilin sonunda planlaşdırılır — amma yeni kompilyator artıq real proqramları yığıb işə sala bilir.

İlk sınaqlardan biri min sətirdən az Roc kodu ilə yazılmış WASM-4 oyunu Rocci Bird oldu. Yeni kompilyatorla roc build --opt=size əmri 31 KB-lıq WebAssembly faylı yaradır ki, bu da orijinal kompilyatorun hasil etdiyinin yarısından azdır. Oyunun işləməsi üçün kompilyatorun xeyli funksiyası tamamlanmalı oldu.

487 günlük yenidən yazma

Yenidən yazma 487 gün çəkdi; Bun-un əks istiqamətdə köçürülməsi — təxminən 500 000 sətir Zig kodunun Rust-a keçirilməsi — 11 gündə tamamlandı. Müəllif bu müqayisəni yanıltıcı sayır: Bun-da birbaşa port idi, Roc isə kompilyatorun böyük hissəsi dəyişəcəyi üçün sıfırdan yazmağı seçdi. Qərar Roc-un lambda set ixtisaslaşdırma sistemindəki və kompilyatorun bir neçə mərhələsinə yayılan arxitektura probleminə görə verildi.

Niyə Zig və yaddaş təhlükəsizliyi ilə nə baş verdi

Seçimi dörd amil müəyyən etdi: yığım müddəti, yaddaşa nəzarət — Roc arena və struct-of-arrays düzülüşlərindən istifadə edir, Zig ekosistemi isə vahid qlobal ayırıcı fərz etmək əvəzinə ayırıcıları ötürür — ekosistem uyğunluğu və yaddaş baxımından təhlükəli kodda dəstək. Rust kompilyatorunda 300 000 sətirdə təxminən 1 200 unsafe istifadəsi var idi və komanda maşın kodu hasil edən kompilyatorlarda belə kodun yazılacağını gözləyirdi.

Təcrübədə keçid zərər vermədi. Claude Opus 4.8 tərəfindən təsnif edilmiş xəta hesabatları Rust kompilyatorunda 2 596 xəta (21-i yaddaş korlanması ilə bağlı) göstərir, Zig kompilyatorunda isə 431 xəta (10-u yaddaş korlanması ilə bağlı) qeydə alınıb. On xətanın səkkizi səhv kompilyasiya idi; qalan ikisi xəta hesabatlığında baş verən use-after-free xətaları idi və roc check ilə roc bundle çıxışında fayl adlarının yerinə əvəzləyici simvollar görünməsinə səbəb oldu.

Yığım müddəti və növbəti addımlar

Ubuntu 26 işlədən Intel masaüstündə 354 min sətirlik Rust kompilyatoru soyuq yığımı 25,4 saniyəyə, inkremental yığımı 3,4 saniyəyə tamamlayırdı. 464 min sətrə çatan Zig variantı soyuq yığımı 32,1 saniyəyə, inkremental yığımı isə təxminən 35 millisaniyəyə tamamlayır — amma yalnız Zig 0.17.0-da, çünki stabil 0.16.0-dakı səhv bu kod bazasında inkremental yığımı pozur. Komanda nightly kompilyatordan asılı olmaq əvəzinə növbəti stabil buraxılışı gözləməyi seçdi.

Kompilyator həmçinin işi diskdə parsingsiz deserializasiya vasitəsilə keşləyir: onun məlumat strukturları göstəricilər yerinə 32 bitlik indeks massivləridir, buna görə keşlənmiş nəticələr parsing olmadan birbaşa yaddaşa yüklənir. roc check-i iki dəfə işlətmək əvvəlki işləmənin nəticələrini təxminən memcpy sürəti ilə təkrar istifadə edir.

SSiTech

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.