crustc, компилятор Rust на C для экзотичных платформ

После трёх лет разработки (14-я попытка) автор выпустил crustc, работающий компилятор Rust, полностью переписанный на C. Это демонстрирующий концепцию проект, основанный на бэкенде cilly, который транслирует Rust-код в C.
Основная инновация cilly, генерация C-кода, адаптированного под конкретный компилятор и платформу. Для этого система использует «witness» программы, которые проверяют, какие возможности поддерживает целевой C-компилятор (например, потокохранилище _Thread_local). На основе этого cilly генерирует разный C-код для разных платформ.
Проект решает проблему, что некоторые старые и редкие архитектуры не поддерживаются LLVM/GCC. С помощью crustc любую Rust-программу можно скомпилировать на любой платформе, если на ней есть хоть какой-то C-компилятор. Автор успешно протестировал это: скомпилировал Rust-программу для x86 Plan9, запустив компилятор на ARM64 Linux.
Система поддерживает даже сетевую прозрачность: можно запустить C-компилятор на целевой платформе как сервер по TCP и компилировать с основной машины, что решает проблему отсутствия кросс-компилятора.
Текущая версия, демонстрация (запускается в несколько минут на обычной машине без оптимизаций). Полная версия cilly не готова: у автора появилась работа, начал учиться в университете. Проект имеет известные проблемы с совместимостью ABI на некоторых архитектурах (ARM64) и нестабильностью оптимизаций.
Ключевые факты
- crustc полностью переписывает rustc на C, позволяя компилировать Rust без LLVM/GCC на любой платформе с C-компилятором
- Основная инновация cilly, адаптивная генерация C-кода через «witness» программы, проверяющие возможности целевого компилятора
- Поддерживается кросс-компиляция через TCP, C-компилятор может работать на целевой платформе как сервер
- Успешно протестирована компиляция Rust-программ для Plan9 и других экзотичных платформ с помощью кросс-компиляции
- Проект находится на стадии proof-of-concept, полная версия планируется позже; текущая демонстрация имеет известные проблемы с ABI и оптимизациями
Почему это важно
Rust часто критикуют за отсутствие поддержки старых и редких платформ (Plan9, экзотичные архитектуры, встроенные системы). Это становится веским аргументом против применения Rust там, где нужна поддержка таких целей. crustc решает эту проблему полностью: везде, где есть C-компилятор, теперь можно использовать Rust. Это открывает язык для огромного числа платформ и систем, которые раньше были недоступны.
Кому это важно
Разработчикам embedded-систем на редких архитектурах, системам управления на историческом оборудовании (промышленная автоматика, legacy-железо). Организациям, которые хотят использовать Rust для критической инфраструктуры, но имеют ограничения по целевым платформам. Авторам инструментов и библиотек, которые хотят расширить поддержку платформ без отказа от Rust.
Как это применить
Проект находится на стадии демонстрации концепции и не готов к боевому использованию. Текущая версия требует конкретную конфигурацию (LLVM, GCC, GNU make). Для использования нужно: установить nightly Rust, предоставить путь к LLVM, запустить make. Полная версия cilly будет выпущена позже, когда станет готовой. Пока это работает для демонстрации, компилятор способен компилировать себя и стандартную библиотеку Rust.
Можно ли доверять
Проект имеет рабочий прототип, компилятор успешно компилирует себя и демонстрирует возможность компилирования Rust-кода для разных платформ. Автор работает над этим 3 года, это 14-я итерация подхода. Код находится на GitHub и открыт для проверки. Однако он не готов к боевому использованию: есть известные баги, особенно с оптимизациями, и требуется тщательное тестирование перед использованием в критических системах.
Риски и подводные камни
Генерируемый C-код компилятор-специфичен: код, сгенерированный для ARM64, не будет работать на RISC-V, нужно перегенерировать. Есть проблемы с совместимостью ABI на ARM64 (способ возврата структур). Оптимизация нестабильна и может привести к багам. Проект требует правильной версии LLVM и конфигурации. Автор недавно получил работу и поступил в университет, что может замедлить разработку и выход полной версии.
«Последние 3 года я работаю над компиляцией Rust в C. Я делал несколько попыток, выложил несколько проектов публично, вроде rustc_codegen_clr, и множество приватных. Это моя 14-я попытка: cilly.»
— FractalFir, автор crustc