핵심 요약
- 개발자가 Claude Code를 활용해 C언어로 작성된 OCaml 런타임 전체를 Rust로 라인 바이 라인 포팅하는 데 성공했습니다.
- 파일 단위 점진적 변환과 테스트 검증을 거쳐 C 코드를 완전히 없앴으며, 컴파일러 셀프 호스팅과 공식 테스트 스위트를 모두 통과했습니다.
- 네이티브 실행 성능은 C와 거의 동등했고, 나이틀리 버전을 적용한 바이트코드 인터프리터는 오히려 C보다 빠른 성능을 기록했습니다.
요약 한 개발자가 Claude Code(Opus 4.7)를 활용해 C언어로 작성되어 있던 OCaml의 런타임을 Rust로 한 줄씩 번역(Line-by-line)해 포팅한 프로젝트를 공개했습니다. 초기 Rust 컴파일러가 OCaml로 작성되었던 역사를 언급하며 일종의 '빚 갚기'로 시작된 이 작업은, 단순한 신규 설계를 LLM에 던져주는 대신 파일 단위, 줄 단위로 C 코드를 동등한 Rust 코드로 1:1 변환하고 단계마다 승인하는 방식으로 진행되었습니다.
빌드 시스템에 파일 단위 토글을 두어 C 파일 대신 Rust 파일을 링크하도록 설정하고, 파일 하나를 포팅할 때마다 OCaml 업스트림의 공식 테스트 스위트를 통과하도록 검증했습니다. 이 덕분에 포팅 진행도가 2%이든 99%이든 런타임은 언제나 정상 실행 가능한 상태를 유지했으며, 버그 발생 시 git bisect를 통해 문제 발생 지점을 정확히 추적할 수 있도록 커밋을 남겼습니다. 현재 해당 런타임은 C 코드가 전혀 남아있지 않은 상태에서도 OCaml 공식 테스트 스위트를 통과하고, 컴파일러 셀프 호스팅 및 dune 빌드, opam switch 설치 등을 완벽하게 수행합니다.
벤치마크 결과에 따르면, Rust stable 기준 네이티브 바이너리 성능은 C 런타임 대비 약 1.05배 수준으로 거의 대등한 성능을 보였습니다. 바이트코드 인터프리터의 경우 Rust stable에서는 C 대비 1.44배 느렸으나, Rust nightly 기능(ETCs)을 적용한 버전에서는 오히려 C보다 빠른 0.91배를 기록하며 놀라운 성능을 달성했습니다. 저자는 정교한 멀티코어 구조와 가비지 컬렉터, 엄격한 FFI 규격을 지닌 성숙한 C 코드베이스를 LLM과 협업하여 성공적으로 포팅해 낸 사례 연구로서 본 프로젝트를 소개했습니다.
Sponsored · 광고