
Valen-ის შემქმნელმა Rust-ის ბიბლიოთეკები C-ის გარეშე დააკავშირა
პროგრამირების ენა Valen-ის ავტორმა, Evan Ovadia-მ, აჩვენა, რომ ახალი ენის Rust-ის კოდთან დაკავშირება C-ის ABI-ის გავლით აუცილებელი არ არის: ორი კომპილერი პირდაპირ ესაუბრება ერთმანეთს და ჯენერიკებიც საზღვარს გადააღწევს.
Valen ენის ავტორმა, Evan Ovadia-მ, გამოაქვეყნა ექსპერიმენტული მიდგომა, რომელიც ახალ ენას Rust-ის კოდთან C-ის ABI-ის გავლის გარეშე აკავშირებს. The Register-მა ამ ნამუშევრის შესახებ 2026 წლის 25 სექტემბერს დაწერა.
Ovadia, Google-ის ყოფილი ინჟინერი და Mojo-ს ერთ-ერთი ძირითადი ავტორი, პროექტს 17 სექტემბერს გამოქვეყნებულ ბლოგ-პოსტში აღწერს. სახელი „ოქროს ლურსმანი“ 1869 წლის ცერემონიიდან აიღო, როცა იუტაში აშშ-ის პირველი ტრანსკონტინენტური რკინიგზა 17,6-კარატიანი ლურსმნით დაასრულეს.

რატომ ჩერდება C-ის ABI ჯენერიკებთან
ბიბლიოთეკები ენებს შორის ჩვეულებრივ C-ის სახით გადადის: Rust-ის crate ფუნქციებს extern C-ის ხელშეკრულებით აქვეყნებს, ტიპებს კი repr(C)-ით, და სხვა ენები მათ უცხო ფუნქციების ინტერფეისით იყენებენ. C-ს ჯენერიკები არ აქვს, ამიტომ Rust-ის ჯენერიკული ფუნქცია გარედან ვერ გამოიძახება; სტაბილური ABI არც თავად Rust-ს აქვს.
Ovadia-ს Valen 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, კომპილაციის დროს მოქმედი მიდგომა, რომელიც საერთო ცვალებად ბმულებს უშვებს; პროტოტიპი Rust-ის საზღვარზე უკვე აკეთებს გარკვეულ borrow checking-ს. ხარვეზები კვლავ რჩება: სტრუქტურები საზღვარზე ჯერ ნულოვანი ზომის უნდა იყოს, generational references გამორთულია, არსებული Rust-ის ტიპი კი ჯერ linear-ად ვერ გამოცხადდება. რეპოზიტორია Apache 2.0 ლიცენზიით გამოქვეყნდა, თუმცა ჯერ პროტოტიპია.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.