Canonical поддержит трёхлетний исследовательский проект, цель которого состоит в том, чтобы сделать автоматический перенос крупных зрелых проектов с C на Rust практичным. Проект реализуют совместно Canonical и Бристольский университет в Великобритании, а работы начнутся во второй половине 2026 года.
Главная цель состоит в создании полноценной платформы, которая сможет переводить крупные репозитории кода, иногда насчитывающие сотни тысяч строк C, в безопасный, надёжный и удобный для сопровождения Rust.
Однако более серьёзная проблема связана с огромным объёмом уже используемого зрелого ПО на C. Ручное переписывание таких проектов дорого и рискованно: код часто содержит годы исправлений, обновлений совместимости, оптимизаций и накопленного опыта.
Существующие трансляторы исходного кода решают проблему лишь частично. В Canonical отмечают, что такие инструменты справляются с большим объёмом кода, но часто слишком точно копируют структуры C. В результате Rust-код по-прежнему опирается на unsafe-возможности, сохраняет типичные для C конструкции и требует большой доработки, прежде чем Rust-разработчики захотят его сопровождать.
У LLM другая сложность. Для небольших и понятных фрагментов они часто генерируют хороший идиоматичный Rust, но удерживать контекст целого репозитория значительно труднее. Вдобавок код, который выглядит корректным, не всегда работает так же, как исходная версия на C.
Для решения этих задач новый проект будет использовать гибридный, или нейросимвольный, подход. Он объединяет машинное обучение с традиционным анализом программ, тестированием и формальными методами.
Как сообщают в Canonical, крупные репозитории сначала будут разбиваться на более мелкие части, которые можно переводить по отдельности, сохраняя ключевые сведения о типах, зависимостях и поведении программы.
Для перевода будут использоваться языковые модели, обученные на известных примерах переноса кода с C на Rust. Цель состоит в том, чтобы получать Rust-код, который использует естественные для Rust конструкции, а не просто копирует синтаксис C. После перевода новый код будут проверять, совпадает ли его поведение с исходной версией на C.
Для пользователей Ubuntu важно, что исследование не ограничится небольшими академическими примерами. Canonical планирует использовать AppArmor и snap-confine как реальные примеры.
В Canonical подчёркивают, что прямо сейчас AppArmor и snap-confine не переписывают на Rust. Эти проекты используются только как примеры для тестирования технологии, и заменять их текущие версии результатами исследования не планируется.
Инициатива также вписывается в более широкую стратегию Canonical по внедрению Rust в Ubuntu. В компании ссылаются на такие проекты, как uutils coreutils и sudo-rs, которые уже заняли место в дистрибутиве.
Дополнительные подробности можно найти в публикации на каналах Ubuntu Discourse.





Пока нет комментариев. Будьте первым!