Rust 컴파일러, C 언어로 재구현되다!

by DD
9시간 전
조회수 0

Rust 컴파일러(rustc) 전체를 C 언어로 재구현한 crustc 프로젝트가 공개됨

LLVM/GCC 지원 없는 임베디드 하드웨어 지원이 주요 목표로 언급됨

크로스 컴파일 및 원격 빌드 기능이 잠재적 활용 사례로 제시됨

컴파일러 무결성 검증을 위한 다양한 시도와 논의가 활발함

Rust 컴파일러 부트스트래핑(Bootstrapping)의 난제

커뮤니티에서는 Rust 컴파일러 자체를 C로 재구현하는 과정에서 부트스트래핑(Bootstrapping) 문제가 핵심 난관으로 지적됨. 일반적으로 Rust 컴파일러를 소스에서 빌드하려면 기존 Rust 컴파일러가 필요한데, 이는 닭이 먼저냐 달걀이 먼저냐(Chicken-and-egg problem)와 같은 순환 의존성을 야기함. 이를 해결하기 위해 mrustc와 같은 C++ 기반의 Rust 컴파일러 구현체나, 본 프로젝트의 crustc와 같이 C 언어로 재작성하는 시도가 이어지고 있음.

LLVM IR 대비 C 백엔드의 장점

논의에서는 LLVM IR(Intermediate Representation)을 사용하는 대신 C 언어로 직접 트랜스파일(Transpile)하는 방식이 구형 하드웨어 지원에 더 유리할 수 있다고 봄. LLVM은 강력한 최적화 기능을 제공하지만, 모든 임베디드 시스템에서 지원되지 않음. 반면, C 언어는 광범위한 플랫폼 호환성을 가지며, GCC와 같은 성숙한 C 컴파일러의 최적화 기능을 활용할 수 있어 실질적인 작동 가능성(Feasibility)이 높다는 평가가 있음.

컴파일러 무결성 검증: Diverse Double-Compiling (DDC)

타리스(taris)는 Diverse Double-Compiling (DDC) 기법을 제안하며 컴파일러의 백도어(Backdoor) 존재 가능성을 검증하는 방법을 제시함. 이는 crustc로 Rust 소스 코드를 컴파일하여 새로운 컴파일러를 생성하고, 이 새 컴파일러와 공식 rustc 바이너리를 동일한 결정론적 플래그(Deterministic Flags)로 다시 컴파일했을 때 결과물이 비트 단위로 일치하는지 확인하는 방식임. 이는 컴파일러 구현의 정확성(Correctness)을 보장하는 중요한 테스트 방법으로 언급됨.

네트워크 기반 크로스 컴파일 및 원격 빌드

crustc의 네트워크를 통한 크로스 컴파일 및 장치 간 빌드 기능은 흥미로운 활용 사례로 제시됨. 사용자는 저사양 OS(예: Blorbo OS)에 경량 C 서버를 구축하고, 리눅스와 같은 일반적인 플랫폼에서 rustc를 실행한 뒤, 네트워크를 통해 통신하는 방식임. 이는 빌드 환경 제약이 있는 환경에서 Rust 코드를 컴파일할 수 있는 유연성을 제공하며, 개발 워크플로우(Development Workflow)를 확장할 수 있는 가능성을 보여줌.

LLVM C 백엔드 재조명 및 가능성

아하트메츠(ahartmetz)는 과거 LLVM이 C 백엔드를 지원했으나 현재는 지원하지 않는다는 점을 언급하며, LLVM C 백엔드 지원 재개 가능성에 대한 LLVM Discourse 토론 링크를 공유함. 만약 LLVM의 C 백엔드가 다시 활성화된다면, 이는 Rust를 C로 트랜스파일하는 데 있어 새로운 최적화 경로(Optimization Path)를 제공할 수 있음. 이는 crustc와 같은 프로젝트에 영향을 줄 수 있는 잠재적 기술 동향임.

crustc: entirety of `rustc`, translated to C