Об этом проекте
rucc — ранний оптимизирующий C‑компилятор, написанный на Rust. Согласно README, цель проекта – сначала SQLite, затем средний уровень известных C‑проектов, потом PostgreSQL и в конечном итоге ядро Linux, без разрешения патчей в исходниках на этом пути. README чётко заявляет, что пока он не компилирует C. M0 и M1 завершены, помечены как v0.1.0 и v0.2.0. M0 охватывает рабочее пространство, проверку правила слоёв, разбор аргументов драйвера и план фаз, планировщик задач и CI на Linux, macOS и Windows. M1 – это препроцессор, описанный как завершённый: фазы трансляции, расширение макросов с hide‑set, директивы включая _Pragma и #embed, разрешение include с #include_next и #pragma once, семейство __has_*, а также предопределённые макросы, генерируемые из описания цели. Команда rucc -E a.c описана как реальный препроцессор, вывод которого сравнивается с референсным компилятором по набору заголовков glibc и musl. rucc a.c в текущий момент выводит план фаз и сообщает, что фазы после препроцессинга не реализованы.
Раздел дизайна описывает несколько запланированных или находящихся в процессе реализации решений. Правила переписывания и шаблоны выбора инструкций пишутся в одном DSL; тот же текст правила компилируется в сопоставитель и передаётся SMT‑решателю в CI, и правила, которые решатель не может подтвердить, не попадают в набор правил. IR планируется без poison и без undefined поведения. Планируются ациклические e‑graphs для переписывания, свёртки констант и глобального перемещения кода, при этом будет построен как e‑graph‑переписыватель, так и традиционный конвейер проходов, и будет проведено измерение, чтобы выбрать победителя. Правило слоёв проверяется cargo xtask layers, присваивая crate‑ам ранги, так что crate может зависеть только от более низких рангов. Путь компиляции нацелен на отсутствие внешних ассемблеров и линкеров: инструкции кодируются в байты, ELF, Mach‑O и COFF пишутся в проекте, DWARF генерируется в проекте. README отмечает, что до версии 1.0 линковка всё ещё вызывается внешним линкером, и вопрос, останется ли это так, открыт.
README формулирует цели как измеримые утверждения о корректности, пропускной способности компиляции, качестве кода и портируемости, с методологией и правилами отчётности, размещёнными в spec/16-performance.md, до появления результатов. Описание структуры репозитория в README включает crates для компилятора, build‑tools для компилятора DSL правил и SMT‑верификатора, runtime‑crates, собираемые под цель, двадцать спецификаций и семнадцать документов по кросс‑компиляции, сгенерированную документацию, xtask‑автоматизацию сборки и тесты. Варианты установки включают готовые бинарники для Linux, macOS и Windows с SHA‑256 файлами и аттестациями происхождения сборки, а также cargo install rucc. Сборка документирована как git clone, cargo build --release, без configure, CMake, Python в процессе сборки и без генерации кода за пределами build.rs и xtask. Задачи включают cargo xtask layers, cargo xtask style и cargo xtask ci. README перечисляет вне‑объёмные элементы: C++, расширения диалекта MSVC, JIT, MSan и компилятор в стиле CompCert. Лицензия — Apache‑2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.