러스트의 안전성을 강화하는 C언어 코드 변환 기술: PR2의 등장
본 기사는 C 언어 코드를 Rust로 변환하는 과정에서 발생하는 안전성 문제를 해결하기 위해 개발된 PR2 기술에 대한 소개입니다. LLM을 활용한 raw pointer 제거 및 에러 수정 기능을 통해 Rust 코드의 안전성을 향상시키는 PR2의 성능과 한계를 다룹니다.

최근 C 언어 코드를 Rust로 변환하는 연구가 활발합니다. Rust는 메모리와 스레드 안전성 보장으로 유명하지만, 기존 C 코드를 무작정 변환하면 unsafe
코드, 특히 raw pointer가 남아 안전성을 위협할 수 있습니다. 이 문제를 해결하기 위해 등장한 것이 바로 PR2 (Peephole Raw Pointer Rewriting) 입니다.
Gao Yifei 등 연구진이 개발한 PR2은 LLM(Large Language Model), 구체적으로는 gpt-4o-mini를 활용하여 C2RUST로 변환된 Rust 코드에서 raw pointer를 제거하는 기술입니다. 단순 변환이 아닌, 의사결정 트리 기반 프롬프팅을 통해 raw pointer를 적절한 Rust 데이터 구조로 변환합니다. 단순히 pointer를 바꾸는 것이 아니라, 변환 과정에서 발생하는 에러를 코드 변경 분석을 통해 수정하는, 보다 정교한 접근 방식을 취하고 있습니다.
실험 결과는 놀랍습니다. 28개의 실제 C 프로젝트를 대상으로 실험한 결과, PR2는 평균 13.22%의 local raw pointer를 성공적으로 제거했습니다. 이는 Rust 코드의 안전성을 크게 향상시킨다는 것을 의미합니다. 물론 비용이 전혀 들지 않는 것은 아닙니다. 프로젝트 변환에는 평균 5.44시간이 소요되었고, 비용은 $1.46 정도였습니다. 하지만 안전성 향상이라는 측면에서 볼 때, 투자 대비 효과는 상당히 높다고 평가할 수 있습니다.
PR2는 단순한 코드 변환 도구를 넘어, LLM을 활용한 코드 안전성 향상의 새로운 가능성을 보여주는 사례입니다. 앞으로 더욱 발전된 LLM과 코드 분석 기술을 통해 더욱 안전하고 효율적인 코드 변환 기술이 개발될 것으로 기대됩니다. 특히, 임베디드 시스템이나 안전이 중요한 시스템 개발에 큰 기여를 할 것으로 예상됩니다. 하지만, 현재 PR2는 프로토타입 단계이며, 대규모 프로젝트 적용 및 다양한 C 코드 스타일 지원에 대한 추가 연구가 필요합니다.
Reference
[arxiv] PR2: Peephole Raw Pointer Rewriting with LLMs for Translating C to Safer Rust
Published: (Updated: )
Author: Yifei Gao, Chengpeng Wang, Pengxiang Huang, Xuwei Liu, Mingwei Zheng, Xiangyu Zhang
http://arxiv.org/abs/2505.04852v1