C에서 안전한 Rust로: LLMs 기반의 혁신적인 코드 변환 기술 PR2


본 기사는 C 코드를 Rust로 안전하게 변환하는 새로운 기술인 PR2에 대해 소개합니다. PR2는 LLMs와 의사결정 트리 기반 프롬프팅을 활용하여 raw pointer를 제거하고, 코드 변경 분석을 통해 오류를 수정하여 Rust 코드의 안전성을 향상시킵니다. 28개의 실제 프로젝트를 대상으로 한 실험 결과, PR2는 raw pointer의 13.22%를 제거하는데 성공했으며, 평균 5.44시간, $1.46의 비용으로 변환을 완료했습니다.

related iamge

최근 Rust 언어의 견고한 메모리 및 스레드 안전성 보장으로 인해 C 코드를 Rust로 변환하려는 관심이 높아지고 있습니다. C2RUST와 같은 도구는 C 코드를 의미적으로 동등한 Rust 코드로 변환하지만, 생성된 Rust 프로그램은 여전히 unsafe 구문, 특히 raw pointer에 크게 의존하는 경우가 많습니다. 이는 Rust의 안전성 보장을 약화시키는 주요 원인입니다.

여기서 획기적인 연구가 등장했습니다. Gao Yifei 등 6명의 연구진이 발표한 논문 "PR2: Peephole Raw Pointer Rewriting with LLMs for Translating C to Safer Rust"는 이 문제를 해결하기 위한 새로운 방법, 바로 PR2 (Peephole Raw Pointer Rewriting) 를 제시합니다.

PR2는 개별 함수 내의 raw pointer를 적절한 Rust 데이터 구조로 변환하는 기술입니다. 핵심은 LLMs (Large Language Models)의사결정 트리 기반 프롬프팅의 활용입니다. LLM은 raw pointer의 제거 과정을 안내하고, 의사결정 트리는 그 과정을 효율적으로 관리합니다. 더 나아가, PR2는 코드 변경 분석을 통해 재작성 과정에서 발생할 수 있는 오류를 수정합니다. 이는 컴파일 및 테스트 케이스 실행 중 발생하는 오류를 효과적으로 해결하는 데 도움이 됩니다.

실험 결과는 놀랍습니다. 연구팀은 PR2의 성능을 평가하기 위해 28개의 실제 C 프로젝트를 gpt-4o-mini와 함께 사용했습니다. 그 결과, PR2는 프로젝트 전체에서 local raw pointer의 13.22%를 성공적으로 제거했습니다. 이는 변환된 Rust 코드의 안전성을 상당히 향상시킨다는 것을 의미합니다. 평균적으로 PR2는 하나의 프로젝트 변환에 5.44시간이 소요되었으며, 비용은 $1.46이었습니다.

PR2는 C 코드를 Rust로 안전하게 변환하는 과정에 혁신을 가져올 잠재력을 가지고 있습니다. 이는 단순히 코드 변환을 넘어, 소프트웨어 안전성 향상이라는 중요한 목표를 달성하기 위한 중요한 발걸음입니다. 앞으로 PR2가 더욱 발전하여 더욱 많은 개발자들에게 안전하고 효율적인 코드 변환을 제공할 수 있기를 기대합니다.


*이 기사는 AI가 생성한 내용으로, 일부 정보가 실제와 다를 수 있습니다. 정확한 확인을 위해 추가적인 검증을 권장드립니다.

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.04852v2