EVOC2RUST: Um Framework Orientado por Esqueleto para Tradução de Projetos de C para Rust
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
Resumo
As garantias de segurança em tempo de compilação do Rust tornam-no ideal para sistemas críticos de segurança, criando uma demanda pela tradução de bases de código C legadas para Rust. Embora diversas abordagens tenham surgido para essa tarefa, elas enfrentam trade-offs inerentes: soluções baseadas em regras têm dificuldades em atender aos requisitos de segurança e idiomaticidade do código, enquanto soluções baseadas em LLMs (Large Language Models) frequentemente falham em gerar código Rust semanticamente equivalente, devido às pesadas dependências de módulos em toda a base de código. Estudos recentes revelaram que ambas as soluções são limitadas a programas de pequena escala. Neste artigo, propomos o EvoC2Rust, um framework automatizado para converter projetos inteiros em C para equivalentes em Rust. O EvoC2Rust emprega uma estratégia de tradução guiada por esqueleto para tradução em nível de projeto. O pipeline consiste em três estágios evolutivos: 1) primeiro, ele decompõe o projeto C em módulos funcionais, utiliza um LLM aprimorado por mapeamento de características para transformar definições e macros, e gera esboços de funções verificados por tipo, que formam um esqueleto Rust compilável; 2) em seguida, ele traduz incrementalmente a função, substituindo o espaço reservado correspondente no esboço; 3) finalmente, ele corrige erros de compilação integrando LLM e análise estática. Por meio de aumento evolutivo, o EvoC2Rust combina as vantagens das soluções baseadas em regras e em LLMs. Nossa avaliação em benchmarks de código aberto e seis projetos industriais demonstra o desempenho superior do EvoC2Rust na tradução de projetos C para Rust. Em média, ele alcança melhorias de 17,24% e 14,32% em precisão sintática e semântica em relação às abordagens baseadas em LLMs, juntamente com uma taxa de segurança de código 96,79% maior do que as ferramentas baseadas em regras. No nível de módulo, o EvoC2Rust atinge taxas de compilação de 92,25% e de aprovação em testes de 89,53% em projetos industriais, mesmo para bases de código complexas e funções longas.
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.