EVOC2RUST: Un Marco Guiado por Esqueletos para la Traducción de C a Rust a Nivel de Proyecto
EVOC2RUST: A Skeleton-guided Framework for Project-Level C-to-Rust Translation
August 6, 2025
Autores: Chaofan Wang, Tingrui Yu, Jie Wang, Dong Chen, Wenrui Zhang, Yuling Shi, Xiaodong Gu, Beijun Shen
cs.AI
Resumen
Las garantías de seguridad en tiempo de compilación de Rust lo hacen ideal para sistemas críticos en términos de seguridad, lo que genera una demanda para traducir bases de código C heredadas a Rust. Si bien han surgido diversos enfoques para esta tarea, enfrentan compensaciones inherentes: las soluciones basadas en reglas tienen dificultades para cumplir con los requisitos de seguridad y idiomáticidad del código, mientras que las soluciones basadas en LLM (Modelos de Lenguaje de Gran Escala) a menudo no logran generar código Rust semánticamente equivalente, debido a las fuertes dependencias de los módulos en toda la base de código. Estudios recientes han revelado que ambas soluciones están limitadas a programas de pequeña escala. En este artículo, proponemos EvoC2Rust, un marco automatizado para convertir proyectos completos de C a equivalentes en Rust. EvoC2Rust emplea una estrategia de traducción guiada por esqueleto para la traducción a nivel de proyecto. El proceso consta de tres etapas evolutivas: 1) primero descompone el proyecto C en módulos funcionales, utiliza un LLM mejorado con mapeo de características para transformar definiciones y macros, y genera esqueletos de funciones verificados por tipos, que forman un esqueleto Rust compilable; 2) luego traduce incrementalmente la función, reemplazando el marcador de posición correspondiente; 3) finalmente, repara errores de compilación integrando LLM y análisis estático. A través de la ampliación evolutiva, EvoC2Rust combina las ventajas de las soluciones basadas en reglas y en LLM. Nuestra evaluación en puntos de referencia de código abierto y seis proyectos industriales demuestra el rendimiento superior de EvoC2Rust en la traducción de C a Rust a nivel de proyecto. En promedio, logra mejoras del 17.24% y 14.32% en precisión sintáctica y semántica sobre los enfoques basados en LLM, junto con una tasa de seguridad del código un 96.79% mayor que las herramientas basadas en reglas. A nivel de módulo, EvoC2Rust alcanza tasas de compilación del 92.25% y de paso de pruebas del 89.53% en proyectos industriales, incluso para bases de código complejas y funciones largas.
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.