Rust 프로그래밍 언어의 소스 코드를 사람이 이해하기 쉬운 C 언어 코드로 변환하는 도구인 Eurydice가 주목받고 있다. 이 프로젝트는 Jonathan Protzenko와 AeneasVerif 팀이 개발했으며, 기존 컴파일러가 생성하는 저수준 중간 표현을 넘어 고수준의 C 구조를 복원하는 데 초점을 맞춘다.
기술적 배경을 살펴보면, 과거에는 rustc 컴파일러와 LLVM 백엔드가 Rust 코드 생성의 유일한 경로였다. 하지만 Eurydice는 이러한 전통적인 접근 방식에서 벗어나, Rust의 타입 시스템과 소유권 규칙을 유지하면서 C 언어의 문법적 특성을 살려내는 새로운 경로를 제시한다. 이는 특히 레거시 C 코드베이스와의 상호작용이나 특정 임베디드 환경에서의 배포 가능성을 높이는 데 기여할 수 있다.
현재 가장 활발하게 논의되는 부분은 Microsoft와 Google의 암호화 라이브러리 통합이다. 두 회사의 주요 보안 모듈을 Eurydice로 변환하여 C 코드로 재구성하는 작업이 진행 중이다. 이는 단순한 기술적 실험을 넘어, 실제 산업 표준으로 자리 잡은 복잡한 Rust 기반 보안 로직을 C 생태계로 이식하려는 시도로 해석된다.
커뮤니티 반응에서는 가독성에 대한 구체적인 피드백이 이어지고 있다. 일부 개발자들은 변환된 C 코드에서 ‘return uu0;’ 같은 자동 생성 변수 이름을 지적하며, 이를 ‘return_value’ 등으로 치환하는 휴리스틱 추가를 제안했다. 완전한 부트스트랩을 위해서는 이름 짓기 단계까지의 정교함이 필요하다는 의견이다.
또 다른 관심사는 런타임 안전성의 보존 여부다. Rust의 강점인 배열 범위 검사 같은 기능들이 C로 변환될 때 어떻게 구현되는지에 대한 질문이 제기되었다. IR 단계에서 이미 처리된 내용이라 해도, 최종 C 코드 수준에서 명확한 바운즈 체크잉 로직이 포함되기를 기대하는 목소리가 나온다.
Eurydice는 Scylla, Charon, Aeneas 등 AeneasVerif의 다른 검증 도구들과 연계되어 사용된다. 이 중 Scylla는 Eurydice의 쌍둥이 프로젝트로 평가받으며, 형식적 검증과 코드 생성 사이의 간극을 좁히는 역할을 한다. 전체적인 툴체인은 Rust의 메모리 안전성을 C의 유연성과 결합하려는 시도에서 출발했다.
D나 C++ 언어에서도 유사한 변환 도구의 필요성이 언급되고 있지만, 현재로서는 Rust에서 C로의 변환에 집중된 상태다. 프로젝트의 성숙도와 실제 적용 사례가 쌓임에 따라, 향후 다른 언어 스택으로의 확장 가능성도 열어두고 있다. 다만 아직 초기 단계인 만큼 모든 기능이 완벽히 지원되는 것은 아니다.
