EVOC2RUST : Un cadre guidé par des squelettes pour la traduction de projets C vers Rust
EVOC2RUST: A Skeleton-guided Framework for Project-Level C-to-Rust Translation
August 6, 2025
papers.authors: Chaofan Wang, Tingrui Yu, Jie Wang, Dong Chen, Wenrui Zhang, Yuling Shi, Xiaodong Gu, Beijun Shen
cs.AI
papers.abstract
Les garanties de sécurité à la compilation de Rust en font un choix idéal pour les systèmes critiques, créant une demande pour la traduction de bases de code C héritées vers Rust. Bien que diverses approches aient émergé pour cette tâche, elles se heurtent à des compromis inhérents : les solutions basées sur des règles rencontrent des difficultés à répondre aux exigences de sécurité et d'idiomaticité du code, tandis que les solutions basées sur des modèles de langage (LLM) échouent souvent à générer du code Rust sémantiquement équivalent, en raison des dépendances lourdes entre les modules à travers l'ensemble de la base de code. Des études récentes ont révélé que ces deux solutions sont limitées à des programmes de petite taille. Dans cet article, nous proposons EvoC2Rust, un cadre automatisé pour convertir des projets C entiers en projets Rust équivalents. EvoC2Rust emploie une stratégie de traduction guidée par un squelette pour la traduction au niveau du projet. Le pipeline se compose de trois étapes évolutives : 1) il décompose d'abord le projet C en modules fonctionnels, utilise un LLM amélioré par une cartographie des fonctionnalités pour transformer les définitions et les macros, et génère des squelettes de fonctions vérifiés par type, formant ainsi un squelette Rust compilable ; 2) il traduit ensuite progressivement les fonctions, en remplaçant les espaces réservés correspondants dans le squelette ; 3) enfin, il corrige les erreurs de compilation en intégrant le LLM et l'analyse statique. Grâce à l'augmentation évolutive, EvoC2Rust combine les avantages des solutions basées sur des règles et des LLM. Notre évaluation sur des benchmarks open source et six projets industriels démontre la performance supérieure d'EvoC2Rust dans la traduction de projets C vers Rust. En moyenne, il obtient des améliorations de 17,24 % et 14,32 % en précision syntaxique et sémantique par rapport aux approches basées sur des LLM, ainsi qu'un taux de sécurité du code 96,79 % plus élevé que les outils basés sur des règles. Au niveau des modules, EvoC2Rust atteint des taux de compilation de 92,25 % et de réussite aux tests de 89,53 % sur des projets industriels, même pour des bases de code complexes et des fonctions longues.
English
Rust's compile-time safety guarantees make it ideal for safety-critical
systems, creating demand for translating legacy C codebases to Rust. While
various approaches have emerged for this task, they face inherent trade-offs:
rule-based solutions face challenges in meeting code safety and idiomaticity
requirements, while LLM-based solutions often fail to generate semantically
equivalent Rust code, due to the heavy dependencies of modules across the
entire codebase. Recent studies have revealed that both solutions are limited
to small-scale programs. In this paper, we propose EvoC2Rust, an automated
framework for converting entire C projects to equivalent Rust ones. EvoC2Rust
employs a skeleton-guided translation strategy for project-level translation.
The pipeline consists of three evolutionary stages: 1) it first decomposes the
C project into functional modules, employs a feature-mapping-enhanced LLM to
transform definitions and macros and generates type-checked function stubs,
which form a compilable Rust skeleton; 2) it then incrementally translates the
function, replacing the corresponding stub placeholder; 3) finally, it repairs
compilation errors by integrating LLM and static analysis. Through evolutionary
augmentation, EvoC2Rust combines the advantages of both rule-based and
LLM-based solutions. Our evaluation on open-source benchmarks and six
industrial projects demonstrates EvoC2Rust's superior performance in
project-level C-to-Rust translation. On average, it achieves 17.24% and 14.32%
improvements in syntax and semantic accuracy over the LLM-based approaches,
along with a 96.79% higher code safety rate than the rule-based tools. At the
module level, EvoC2Rust reaches 92.25% compilation and 89.53% test pass rates
on industrial projects, even for complex codebases and long functions.