
Автор Valen з'єднав нові мови з Rust без C ABI
Evan Ovadia, автор мови програмування Valen і колишній інженер Google, показав, як нові мови можуть напряму викликати узагальнений код Rust: компілятор Rust запускається як бібліотека, а не через C ABI.
Evan Ovadia, розробник мови програмування Valen, опублікував експериментальний спосіб з'єднати нову мову напряму з Rust, не проводячи виклики через C ABI. The Register написав про цю роботу 25 вересня 2026 року.
Ovadia, колишній інженер Google і один з основних авторів Mojo, описав проєкт у блозі 17 вересня 2026 року. Назву «Golden Spike» він узяв із церемонії 1869 року в штаті Юта, де 17,6-каратний золотий костиль завершив першу трансконтинентальну залізницю США.

Чому C ABI зупиняється на узагальненнях
Зазвичай бібліотеки перетинають межу мов як C: крейт Rust показує функції як extern "C", а типи як repr(C), і інші мови викликають їх через інтерфейс зовнішніх функцій. Але в C немає узагальнень, тому узагальнену функцію Rust ззовні викликати неможливо; стабільного ABI в Rust теж немає.
Ovadia хотів зробити Valen швидшою та зручнішою альтернативою Rust, але й далі користуватися бібліотеками Rust, зокрема власною графічною бібліотекою на wgpu. «Головне питання, головна загадка, яку треба розв'язати, це як зробити узагальнення між мовами?» — написав він.
Два компілятори, один танець
Замість генерації C-обгорток компілятор Valen тепер керує rustc напряму. Він читає імпорти Valen, створює невеликий Rust lib.rs із відповідними use і передає його в rustc_driver::run_compiler, який запускає компілятор Rust як бібліотеку; callback повідомляє, коли потрібні залежності завантажено.
Найскладніше це інстанціювання: обидві сторони узагальнені, тож обидва компілятори разом мають з'ясувати, які конкретні версії функцій викликаються. Ovadia називає це «танцем»: коли rustc потрібна функція, написана на Valen, мономорфізатор Valen створює її. Для цього він додав у rustc близько 100 рядків додаткових callback-ів; вони спираються на приватні, нестабільні API і не можуть потрапити в upstream, зазначає він.
Перший рендер і те, чого бракує
Доказ з'явився, коли програма на Valen відкрила вікно Rust, передала замикання Valen, що реалізує трейт Rust, у загальний цикл Rust і намалювала кадр зі своєї графічної бібліотеки. «Золотий костиль забито, і трансконтинентальний компілятор народився», — написав він.
Наступна мета це безпека пам'яті на межі. У Valen використовується group borrowing, підхід часу компіляції, що дозволяє спільні змінні посилання; прототип уже частково перевіряє позичання через межу з Rust. Залишаються й гострі кути: структури на межі мають бути нульового розміру, generational references вимкнено, а наявний тип Rust поки не можна оголосити лінійним. Репозиторій опубліковано під ліцензією Apache 2.0, і він досі прототип.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.