
Canonical, компанията зад Ubuntu Linux, ще финансира създаването на автоматичен преводач на програми, написани на C, към Rust. Проектът се разработва от Университета в Бристол и цели да улесни прехвърлянето на големи масиви от стар код към по-съвременния език.
Според съобщение на уебсайта на Canonical, финансирането ще продължи през следващите три години. Не е уточнено нито какъв е размерът на инвестицията, нито дали разработката ще бъде завършена в този срок.
Засега проектът е представен като изследователски. Целта е да се автоматизира процес, който обикновено изисква значителен ръчен труд. При пренаписването на C код разработчиците рискуват да загубят и натрупани през годините корекции и оптимизации.
От C към Rust
Езикът за програмиране C е създаден през 1972 г. и вече повече от пет десетилетия е в основата на голяма част от съвременния софтуер. Код на C се използва в Windows и macOS, както и в ядрото на Linux.
Един от основните недостатъци на C е ръчното управление на паметта. Разработчикът трябва сам да заделя и освобождава памет, например чрез функциите malloc и free. Грешките при този процес могат да доведат до изтичане на памет и уязвимости.
Rust е създаден през 2006 г. и е проектиран с акцент върху безопасността на паметта. Именно това е една от причините този език все по-често да се използва при разработване на системен софтуер.
В Linux екосистемата спорът между привържениците на C и Rust продължава от години. Поддръжката на Rust в ядрото на Linux дълго време беше експериментална, но в края на 2025 г. се превърна в основна характеристика.
Microsoft също работи по прехвърляне на част от своя софтуер към Rust. В началото на 2024 г. компанията започна работа по пренаписване на ключов сървърен компонент, използван от Microsoft 365.
Машинно обучение ще помага при превода
Проектът на Университета в Бристол ще комбинира класически методи за анализ, проверка и верификация на кода с алгоритми за машинно обучение.
За обучението на AI моделите ще бъдат използвани съществуващи хранилища, в които C код вече е прехвърлен към Rust с традиционни методи.
Системата ще разделя големите кодови бази на отделни фрагменти и ще ги превежда поотделно. Разработчиците възнамеряват да запазят контекста на програмата, както и зависимостите и информацията за типовете.
Към преводача ще бъде разработен и инструмент за проверка на получения Rust код. Той ще използва fuzzing тестове, комбинирани с елементи на формална верификация.
Целта е автоматизацията да ускори прехвърлянето на големи хранилища от C към Rust, без това да означава просто механичен превод на един програмен език към друг.
