최근 'Eurydice'(유리디체)라는 새로운 도구가 Rust(러스트)로 작성된 코드를 그 구조와 평가 순서를 최대한 보존하면서 읽기 쉬운 C 코드로 변환해 주목받고 있습니다. 이는 기존 C 언어용으로 개발된 정형 검증(formal verification) 및 규정 준수(compliance) 도구를 활용해야 하는 고신뢰성 소프트웨어 분야나, Rust 컴파일러가 작동하지 않는 특수한 환경에서 Rust 코드의 활용성을 높이기 위한 목적으로 개발되었습니다.
Eurydice는 Rust 컴파일러인 rustc의 중간 표현(MIR)을 추출하는 'Charon'(카론)과 코드 생성기 'KaRaMeL'(카라멜)을 활용하는 도구 체인입니다. 일반적인 컴파일러와 달리, 기계어 생성을 위한 최적화보다는 원본 Rust 코드의 구조와 의미론적 정확성을 C 코드에서 보존하는 데 집중합니다. 예를 들어, Rust의 재귀 함수는 C에서도 재귀 구조를 유지하며, 곱셈 오버플로와 같은 평가 순서가 중요한 부분은 임시 변수를 추가하여 C에서도 동일한 동작을 보장합니다. 다만, Rust의 반복자(iterator), 제네릭(generic), 동적 크기 타입(dynamically sized type) 등은 C의 특성에 맞춰 별도의 변환 로직이나 여러 타입의 함수 생성(단형화)이 필요하며, C의 엄격한 별칭 규칙(strict aliasing rule) 위반 가능성 때문에 특정 컴파일러 플래그 사용이 권장됩니다.
이러한 접근 방식은 Rust가 제공하는 안전성과 생산성을 유지하면서도, 오랜 기간 검증된 C 생태계의 도구들을 활용할 수 있게 해준다는 점에서 의미가 큽니다. 특히 항공우주, 국방, 의료 등 높은 신뢰성이 요구되는 분야에서는 소프트웨어의 안전성을 수학적으로 증명하는 정형 검증이 필수적인데, 아직 Rust를 직접 지원하는 정형 검증 도구가 부족한 상황입니다. Eurydice는 이러한 과도기적 상황에서 Rust 개발자들이 C 기반의 기존 도구들을 활용하여 Rust 코드의 신뢰성을 확보할 수 있는 징검다리 역할을 합니다. 또한, Rust 컴파일러를 설치하기 어려운 임베디드 시스템 같은 환경에서도 Rust 코드 배포를 가능하게 하여 Rust의 적용 범위를 넓힐 수 있습니다.