C++로 작성된 기존 소프트웨어의 메모리 안전성 문제를 해결하기 위해, C++ 코드를 자동으로 안전한 러스트(Rust) 코드로 변환해주는 도구 'Cpp2Rust'가 공개되었습니다. 이 프로젝트는 clang의 추상 구문 트리(AST)를 기반으로 C++ 소스 코드를 분석하고, 이를 기능적으로 동등하면서도 메모리 안전성이 보장되는 러스트 코드로 변환하는 것을 목표로 합니다.
Cpp2Rust의 변환 과정은 크게 세 단계로 이루어집니다. 먼저, clang을 이용해 C++ 입력 파일을 파싱하여 AST를 생성합니다. 다음으로, 이 AST를 순회하며 러스트 코드를 문자열 형태로 생성하고, 이때 C 포인터의 의미를 모델링하는 'libcc2rs' 런타임 라이브러리의 'Ptr<T>' 타입 호출을 삽입하여 러스트의 소유권(ownership) 모델을 준수하도록 합니다. 마지막으로, 'rustfmt'를 사용하여 생성된 러스트 코드를 정리하고 단일 '.rs' 파일로 출력합니다. 기본적으로 참조 카운팅 모델을 사용해 완전히 안전한 러스트 코드를 생성하며, 디버깅이나 성능 비교를 위해 'unsafe' 러스트 코드 생성 옵션도 제공합니다.
이러한 자동 변환 도구의 등장은 C++ 기반 소프트웨어의 고질적인 메모리 안전성 취약점 문제를 해결하는 데 중요한 의미를 가집니다. 널리 배포된 소프트웨어 보안 취약점의 약 70%가 C/C++의 메모리 안전성 버그에서 비롯된다는 점을 고려할 때, 기존 C++ 코드베이스를 러스트와 같은 메모리 안전 언어로 옮기는 것은 장기적으로 매우 유망한 해결책입니다. Cpp2Rust는 수작업으로 이루어지던 번거롭고 오류 발생 가능성이 높은 이식 작업을 자동화하여, 개발자들이 더 안전한 시스템을 구축하고 미래 개발을 러스트 생태계로 전환하는 데 중요한 발판을 제공할 것으로 기대됩니다.