Представлен crustc: компилятор rustc, транслированный на язык Си
Опубликован проект crustc — это компилятор для языка программирования Rust, который был получен путем автоматизированной трансляции исходного кода штатного компилятора rustc версии 1.98.0-nightly на язык Си. В результате преобразования было сгенерировано внушительное количество кода: около 46 миллионов строк на языке Си. Полученную кодовую базу можно скомпилировать с помощью стандартного инструментария, такого как GCC и классическая утилита make. Важно отметить, что такой компилятор сохраняет свою функциональность и успешно проходит тесты по сборке кода, включая стандартные библиотеки Rust.
Зачем нужен проект cilly?
Создание crustc стало демонстрацией возможностей экспериментального инструмента cilly. Этот компилятор предназначен для трансляции проектов с Rust на язык Си. Основная цель разработки заключается в обеспечении сборки Rust-кода в тех системных окружениях и на тех архитектурах, которые в данный момент не имеют официальной поддержки со стороны компилятора rustc.
На выходе cilly формирует код, соответствующий стандарту ANSI C (C89). Это открывает широкие перспективы для портирования: такой подход позволяет собирать современные Rust-проекты даже на устаревших системах, где отсутствуют актуальные версии LLVM или GCC, но присутствует базовый компилятор ANSI C. На текущий момент проект cilly находится в стадии доработки и пока не доступен широкой публике. Автор проекта ведет работу над ним самостоятельно на протяжении последних трех лет и планирует открыть исходный код после завершения этапа подготовки к полноценному тестированию.
Особенности работы транслятора
Технически cilly реализован как бэкенд для rustc, который преобразует внутреннее представление (HIR/MIR) языка Rust в исходный код на Си. Ключевая особенность этого метода заключается в том, что трансляция выполняется строго с учетом специфики конкретной целевой платформы и используемого Си-компилятора.
На этапе предварительной проверки cilly создает профиль целевого окружения. Это происходит путем автоматизированного тестирования: компилятор собирает набор мини-программ, чтобы оценить поддержку специфических возможностей (например, _Thread_local), а также определить критически важные параметры платформы — размеры базовых типов, правила выравнивания данных в памяти и специфику раскладки структур.






