Rust 컴파일러, 이제 C로도 컴파일 가능!
Rust 컴파일러(rustc) 전체를 C 코드로 변환하는 'crustc' 프로젝트가 공개됨
LLVM 의존성 없이 GCC 등 C 컴파일러로 Rust 코드 컴파일 지원 목표
구형/특수 하드웨어 지원 및 부트스트랩 패러독스 해결에 중점
커뮤니티에서는 Zig와의 비교 및 C의 configure 방식 차용에 주목
crustc의 C 코드 생성 및 컴파일 방식
crustc는 rustc 컴파일러 자체를 C 코드로 변환하여 4600만 라인의 C 코드를 생성합니다. 이 C 코드는 GCC와 make를 사용하여 빌드되며, LLVM 라이브러리 경로를 지정해주면 실행 가능한 Rust 컴파일러가 됩니다. 이는 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 LLVM 의존성을 제거하고, 특정 C 컴파일러 및 플랫폼 지원 여부를 확인하는 'witness' 프로그램 생성 방식을 차용하여 유연성을 높인 것이 특징입니다.
구형 하드웨어 및 부트스트랩 패러독스 해결
이 프로젝트의 핵심 목표는 LLVM이나 GCC 지원이 없는 구형/특수 하드웨어에 대한 Rust 지원을 가능하게 하는 것입니다. 또한, 네트워크 투명성을 통해 TCP 통신으로 C 컴파일러와 연동하여, 크로스 컴파일러가 없는 환경에서의 부트스트랩 패러독스(Bootstrap Paradox)를 해결할 수 있습니다. 이를 통해 Plan 9과 같은 특수 OS 환경에서도 Rust 프로그램을 컴파일하는 것이 가능해졌습니다.
Zig와의 비교 및 커뮤니티 반응
커뮤니티에서는 Zig의 광범위한 크로스 컴파일 타겟 지원 및 셀프 호스팅 툴체인과 비교하며 crustc의 의미를 논의합니다. Zig와 달리 LLVM 의존성을 제거하고 C 코드로 변환하는 방식은 새로운 접근 방식으로 평가받습니다. 또한, C 언어의 `configure` 스크립트와 유사한 적응형 컴파일러 방식에 대한 흥미로운 시각도 제시되었습니다.
개발자의 끈기와 향후 계획
개발자는 이 프로젝트가 14번째 시도임을 밝히며, 3년간의 노력을 강조했습니다. 현재는 데모/티저 단계이며, 전체 cilly 툴체인은 아직 공개되지 않았습니다. 개인적인 사정(부상, 학업 등)으로 개발 속도가 더뎌졌으나, 가능한 한 빨리 공개할 예정임을 밝혔습니다. ABI 호환성 문제 등 일부 알려진 버그도 존재합니다.