Roc programmēšanas valodas kompilators tagad strādā Zig valodā. Iepriekš tas bija rakstīts Rust valodā. Valodas autors Ričards Feldmans 15. jūlijā paziņoja, ka jaunais kompilators sasniedzis funkciju paritāti ar veco — tas dara visu to pašu, ko darīja iepriekšējais. Pārrakstīšana aizņēma 487 dienas un aptuveni 300 000 rindu koda; gatavais Zig kods ir ap 464 000 rindu.
Gājiens ir pretējs tam, ko dažas dienas iepriekš izdarīja Bun. Bun komanda ar 50 Claude aģentiem 11 dienās pārrakstīja savu izpildlaiku no Zig uz Rust. Roc to pašu ceļu nogāja ar rokām un pretējā virzienā — no Rust uz Zig. Vienā jūlijā divi augsta profila projekti apmainīja sistēmu valodas tieši uz pretējām pusēm.
Kāpēc pamest Rust
Feldmans nosauc trīs praktiskus iemeslus. Pirmais ir būvēšanas laiks: Rust inkrementālie būvējumi kļuva par sāpi, kolīdz kods auga. Otrais ir atmiņas kontrole. Zig ekosistēmā par normu tiek uzskatīti smalki alokatori un struktūru-masīvu izkārtojums, kamēr Rust pieņem vienu globālu alokatoru. Trešais — Roc Rust kompilatorā bija aptuveni 1200 unsafe lietojumu, un Zig dod vairāk rīku, lai ar šādu kodu strādātu.
Roc arī nebija plāns tikai nomainīt valodu. Sākotnējais iemesls pārrakstīt lielāko daļu kompilatora bija arhitektūras problēma ar lambda kopu specializāciju — Roc polimorfisma sistēmu. Ajaza Hafiza OCaml prototips parādīja, ka problēma sniedzas cauri vairākām kompilatora fāzēm. Kad tik un tā bija jāraksta no jauna, komanda izvēlējās to darīt Zig valodā.
Ko pārrakstīšana ļāva izdarīt
Jaunais kompilators izstrādes režīmā automātiski pārlādē kodu. Var mainīt strādājoša servera vai spēles kodu, un nākamajā pieprasījumā tas ielādējas jau ar izmaiņām — restarts nav vajadzīgs. Tas ir tuvāk tam, ko sagaida no skriptu valodas, nekā tam, ko parasti dod kompilēta valoda. Feldmans rāda maršrutu ar rakstzīmju virknes interpolāciju, piemēram, "/users/${id}/${page}", kas apstrādes laikā neveic nevienu kaudzes alokāciju.
Zem tā ir tehnika, ko Feldmans sauc par programmēšanu bez rādītājiem. Kompilators iekšēji rādītāju vietā lieto 32 bitu masīva indeksus. Tas ļauj kešot kompilatora datu struktūras tieši diskā un ielādēt tās atpakaļ bez parsēšanas, aptuveni memcpy ātrumā. Paņēmiens nāk no spēļu izstrādes, un to izmanto arī pats Zig kompilators. Šķērskompilācija arī kļuva vienkāršāka: roc build --target=x64musl uz dažādiem datoriem izdod tos pašus baitus.
Būvēšanas laiks
Feldmana mērījumos pašreizējā Zig koda inkrementālais būvējums uz nakts Zig 0.17.0 aizņem 35 milisekundes. Tā paša projekta Rust versijai inkrementālais būvējums ar Rust 1.97.0 bija 3,4 sekundes — apmēram simt reižu ilgāk. Feldmans to sauc par citu ātruma kategoriju.
Priekšrocība pagaidām ir teorētiska. Tās 35 milisekundes balstās uz Zig karodziņu -fincremental, kuram stabilajā 0.16.0 versijā vēl ir kļūdas, kas neļauj to izlaist. Līdz tam brīdim Roc komanda šo ātrumu ikdienā neizmanto — reālais inkrementālais būvējums joprojām mērāms sekundēs. Developers Digest analīzē uz to norāda kā uz galveno atrunu skaistajam skaitlim.
Salīdzinājumam Feldmans dod arī vecākas versijas: ar Rust 1.85.0 tas pats inkrementālais būvējums aizņēma 10 sekundes, tātad pāreja uz Rust 1.97.0 to jau bija saīsinājusi līdz 3,4 sekundēm. Zig 35 milisekundes tomēr paliek atsevišķā kategorijā, ja karodziņš reiz kļūs stabils.
Atmiņas drošība
Šeit rezultāts ir niansētāks, nekā varētu gaidīt no pārejas prom no Rust. Feldmans saskaitīja atmiņas bojājumu kļūdas abās kompilatoru versijās: Rust versijā 21, Zig versijā 10. Bet tās 21 Rust kļūda nenāca no unsafe blokiem. Tās bija miskompilācijas — kļūdas pašā kompilatorā, kas sabojāja ģenerēto mašīnkodu, nevis atmiņas problēmas kompilēšanas laikā. Zig pusē abas atmiņas drošības kļūdas bija use-after-free kļūdas kļūdu ziņojumu kodā, un Rust aizņēmumu pārbaudītājs tās būtu noķēris.
Izvēloties tabulā citu rindu, projektam nebūtu bijusi manāma atšķirība.
Tā Feldmans komentē pašu skaitļu salīdzinājumu. Viņa doma nav pierādīt, ka viena valoda ir drošāka par otru; abās versijās kļūdu skaits pēc gandrīz pusotra gada darba izlīdzinājās tiktāl, ka izvēle nebūtu mainījusi rezultātu. Tieši šī atruna raksta diskusijās Lobsters un Tildes forumos izraisīja lielāko daļu strīdu: vai pāreju prom no Rust vispār var pamatot ar drošības skaitļiem, ja lielākā daļa Rust kļūdu bija miskompilācijas, nevis atmiņas problēmas.
Kas tālāk
Funkciju paritāte nav formāls laidiens. Roc mērķē uz pirmo numurēto versiju 0.1.0 vēlāk 2026. gadā, un pagaidām pieejami nakts būvējumi. Feldmans arī atklāti uzskaita, kas viņam no Rust pietrūkst: automātiska atmiņas atbrīvošana testos, parametriskais un ad hoc polimorfisms, privāti struktūru lauki, atpakaļsaderība laidienos. No Zig viņam patīk iepakotas struktūras, u5 un u7 skaitļu tipi, kā arī kļūdu apstrādes modelis, kur neizdevusies kaudzes alokācija ir parasta lietotāja kļūda.
Divi projekti vienā mēnesī pārrakstīja kompilatorus pretējos virzienos, un abu komandas ir apmierinātas ar rezultātu. Roc kods no šā brīža ir Zig; nākamais atskaites punkts ir 0.1.0.
Avoti
- Richard Feldman — How Our Rust-to-Zig Rewrite is Going (rtfeldman.com, 15.07.2026.)
- Developers Digest — Roc’s Rust-to-Zig Rewrite: 487 Days, 300K Lines, and What the Numbers Actually Show
- DevClass — Zig creator calls Bun’s Claude Rust rewrite ‘unreviewed slop’
- Lobsters — Roc rewrites the compiler in Zig (diskusija)
- Tildes — How our Rust-to-Zig rewrite is going (diskusija)
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.