Վերադառնալ
Valen-ի հեղինակը նոր լեզուները Rust-ին միացնում է առանց C ABI-ի
SiTech AI Team2 წთ. საკითხავი

Valen-ի հեղինակը նոր լեզուները Rust-ին միացնում է առանց C ABI-ի

Valen ծրագրավորման լեզվի հեղինակ Evan Ovadia-ն, Google-ի նախկին ինժեներ, ցույց է տվել, թե ինչպես նոր լեզուները կարող են ուղղակիորեն կանչել Rust-ի ջեներիկ կոդը՝ Rust-ի կոմպիլյատորը գրադարանի պես գործարկելով, այլ ոչ թե C ABI-ის միջոցով։

Valen ծրագրավորման լեզվի մշակող Evan Ovadia-ն հրապարակել է փորձարարական մեթոդ, որը նոր լեզուն ուղղակիորեն միացնում է Rust-ին՝ առանց կանչերը C ABI-ով անցկացնելու։ The Register-ը այդ մասին գրել է 2026 թվականի սեպտեմբերի 25-ին։

Ovadia-ն, ով Google-ի նախկին ինժեներ է և Mojo-ի հիմնական ներդրողներից մեկը, նախագիծը նկարագրել է սեպտեմբերի 17-ի բլոգ-գրառման մեջ։ «Golden Spike» անվանումը վերցրել է 1869 թվականի արարողությունից, երբ Յուտայում 17,6 կարատանոց ոսկե մեխը ավարտեց ԱՄՆ-ի առաջին անդրմայրցամաքային երկաթուղին։

Valen ծրագրի առաջին ռենդերը Rust-ի գրաֆիկական գրադարանի միջոցով

Ինչու C ABI-ն կանգ է առնում ջեներիկների վրա

Գրադարանները սովորաբար լեզուների սահմանով անցնում են C-ի տեսքով. Rust-ի crate-ը ֆունկցիաները ներկայացնում է որպես extern "C", տիպերը՝ որպես repr(C), և այլ լեզուները դրանք կանչում են արտաքին ֆունկցիաների ինտերֆեյսով։ Սակայն C-ն ջեներիկներ չունի, ուստի Rust-ի ջեներիկ ֆունկցիան դրսից հնարավոր չէ կանչել. Rust-ը նաև սեփական կայուն ABI չունի։

Ovadia-ն ուզում է, որ Valen-ը լինի Rust-ից արագ և հարմար այլընտրանք, բայց միաժամանակ ցանկանում է օգտվել Rust-ի գրադարաններից, այդ թվում՝ wgpu-ի վրա հիմնված իր գրադարանից։ «Կենտրոնական հարցը, լուծելիք գլխավոր առեղծվածը սա է՝ ինչպես անենք միջլեզվային ջեներիկներ»,- գրել է նա։

Երկու կոմպիլյատոր, մեկ պար

C-կապեր գեներացնելու փոխարեն Valen-ի կոմպիլյատորն այժմ ուղղակիորեն կառավարում է rustc-ն։ Այն կարդում է Valen-ի import-ները, գեներացնում է փոքրիկ Rust lib.rs՝ համապատասխան use հայտարարություններով, և այն փոխանցում rustc_driver::run_compiler-ին, ինչը թույլ է տալիս Rust-ի կոմպիլյատորը գործարկել որպես գրադարան։

Ամենադժվարը ինստանցավորումն է. քանի որ երկու կողմերն էլ ջեներիկ են, երկու կոմպիլյատորները միասին պետք է պարզեն, թե ֆունկցիայի որ կոնկրետ տարբերակներն են կանչվում։ Ovadia-ն դա անվանում է «պար». երբ rustc-ին պետք է Valen-ով գրված ֆունկցիա, Valen-ի մոնոմորֆիզատորը ստեղծում է այն։ Դրա համար նա rustc-ում ավելացրել է մոտ 100 տող callback. դրանք հենվում են փակ, անկայուն API-ների վրա և հնարավոր չէ ներառել upstream-ում, նշում է նա։

Առաջին ռենդերը և ինչ դեռ պակասում է

Ապացույցը եկավ, երբ Valen-ի ծրագիրը բացեց Rust-ի պատուհան, Rust-ի trait-ը իրականացնող Valen-ի closure փոխանցեց ջեներիկ Rust ցիկլին և գծեց մեկ կադր իր գրադարանից։ «Ոսկե մեխը խփվեց տեղը, և անդրմայրցամաքային կոմպիլյատորը ծնվեց»,- գրել է նա։

Հաջորդ նպատակը սահմանի վրա հիշողության անվտանգությունն է։ Valen-ում օգտագործվում է group borrowing՝ կոմպիլյացիայի ժամանակ գործող մոտեցում, որը թույլ է տալիս ընդհանուր փոփոխվող հղումներ. նախատիպն արդեն որոշակի borrow checking է անում Rust-ի սահմանին։ Կան նաև սուր անկյուններ. struct-ները սահմանին պետք է զրոյական չափի լինեն, generational references-ը անջատված է, իսկ գոյություն ունեցող Rust տիպը դեռ հնարավոր չէ հայտարարել linear։ Ռեպոզիտորիան հրապարակված է Apache 2.0 լիցենզիայով և դեռ նախատիպ է։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։