프로젝트 소개
rucc는 Rust로 작성된 초기 단계 최적화 C 컴파일러입니다. README에 따르면 프로젝트의 목표 사다리는 먼저 SQLite, 그 다음 잘 알려진 C 프로젝트들, 이어 PostgreSQL, 최종적으로는 Linux 커널이며, 이 사다리에서는 소스 패치를 허용하지 않습니다. README는 아직 C 코드를 컴파일하는 기능이 없다고 명확히 밝히고 있습니다. M0와 M1은 각각 v0.1.0, v0.2.0 태그가 붙어 완성되었습니다. M0는 작업공간, 체크된 레이어 규칙, 드라이버 인자 파싱 및 단계 계획, 작업 스케줄러, 그리고 Linux, macOS, Windows용 CI를 포함합니다. M1은 전처리기로, 번역 단계, 숨김 집합 매크로 확장, _Pragma 및 #embed 지시문, #include_next와 #pragma once를 이용한 포함 해석, __has_* 패밀리, 그리고 타깃 설명에서 생성된 사전 정의 매크로를 모두 구현한 것으로 설명됩니다. `rucc -E a.c`는 실제 전처리기로, glibc와 musl 헤더 세트에 대해 레퍼런스 컴파일러와 출력 차이를 비교합니다. 현재 `rucc a.c`는 단계 계획을 출력하고 전처리 이후 단계가 구현되지 않았음을 보고합니다.
설계 섹션에서는 여러 계획 중 현재 진행 중인 선택 사항들을 설명합니다. 재작성 규칙과 명령 선택 패턴은 하나의 DSL로 작성되며, 동일한 규칙 텍스트가 매처로 컴파일되고 CI에서 SMT 솔버에 전달됩니다. 솔버가 증명하지 못한 규칙은 규칙 집합에 포함되지 않습니다. IR은 포이즌과 정의되지 않은 동작이 없도록 설계되었습니다. 비순환 e‑graph는 재작성, 상수 접기, 전역 코드 이동에 사용될 예정이며, e‑graph 재작성기와 기존 패스 파이프라인을 모두 구축해 성능을 비교해 승자를 선택합니다. 레이어 규칙은 `cargo xtask layers`에 의해 검사되며, 크레이트에 순위가 부여되어 낮은 순위의 크레이트만 의존하도록 합니다. 컴파일 경로는 외부 어셈블러나 링커 없이 진행되는 것이 목표이며, 명령은 바이트로 인코딩되고 ELF, Mach‑O, COFF는 프로젝트 내에서 작성되며 DWARF도 자체적으로 출력됩니다. README는 1.0 이전에는 실제 링커를 호출해 링크한다는 점을 명시하고, 이후에도 유지될지는 미정이라고 적혀 있습니다.
README는 목표를 정확성, 컴파일 처리량, 코드 품질, 이식성에 대한 측정 가능한 주장으로 제시하고, 방법론과 보고 규칙을 `spec/16-performance.md`에 미리 정의해 두었습니다. 저장소 레이아웃은 컴파일러용 크레이트, 규칙 DSL 컴파일러와 SMT 검증기용 빌드 도구, 타깃용 런타임 크레이트, 20개의 사양 문서와 17개의 교차 컴파일 문서, 자동 생성 문서, xtask 빌드 자동화, 테스트 등을 포함합니다. 설치 옵션으로는 Linux, macOS, Windows용 사전 빌드 바이너리와 SHA‑256 파일 및 빌드 증명서, 그리고 `cargo install rucc`가 제공됩니다. 빌드 방법은 `git clone` 후 `cargo build --release`이며, 구성 스크립트, 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.