EVOC2RUST: Ein Skelett-gesteuertes Framework für die projektweite C-zu-Rust-Übersetzung
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
Rusts Garantien für Sicherheit zur Kompilierzeit machen es ideal für sicherheitskritische Systeme, was die Nachfrage nach der Übersetzung von Legacy-C-Codebasen in Rust erhöht. Obwohl verschiedene Ansätze für diese Aufgabe entstanden sind, stehen sie vor inhärenten Kompromissen: regelbasierte Lösungen haben Schwierigkeiten, die Anforderungen an Code-Sicherheit und Idiomatizität zu erfüllen, während LLM-basierte Lösungen oft daran scheitern, semantisch äquivalenten Rust-Code zu generieren, aufgrund der starken Abhängigkeiten von Modulen über die gesamte Codebasis hinweg. Aktuelle Studien haben gezeigt, dass beide Lösungen auf kleine Programme beschränkt sind. In diesem Artikel schlagen wir EvoC2Rust vor, ein automatisiertes Framework zur Konvertierung gesamter C-Projekte in äquivalente Rust-Projekte. EvoC2Rust verwendet eine skelettgesteuerte Übersetzungsstrategie für die Übersetzung auf Projektebene. Die Pipeline besteht aus drei evolutionären Phasen: 1) Zunächst zerlegt es das C-Projekt in funktionale Module, verwendet ein feature-mapping-verstärktes LLM, um Definitionen und Makros zu transformieren, und generiert typgeprüfte Funktionsstubs, die ein kompilierbares Rust-Skelett bilden; 2) Anschließend übersetzt es die Funktion schrittweise und ersetzt den entsprechenden Stub-Platzhalter; 3) Schließlich behebt es Kompilierungsfehler durch die Integration von LLM und statischer Analyse. Durch evolutionäre Erweiterung kombiniert EvoC2Rust die Vorteile sowohl regelbasierter als auch LLM-basierter Lösungen. Unsere Bewertung auf Open-Source-Benchmarks und sechs industriellen Projekten demonstriert die überlegene Leistung von EvoC2Rust bei der projektbasierten C-zu-Rust-Übersetzung. Im Durchschnitt erreicht es Verbesserungen von 17,24 % und 14,32 % in der Syntax- und Semantikgenauigkeit gegenüber den LLM-basierten Ansätzen sowie eine 96,79 % höhere Code-Sicherheitsrate als die regelbasierten Tools. Auf Modulebene erreicht EvoC2Rust Kompilierungs- und Testdurchlaufraten von 92,25 % bzw. 89,53 % bei industriellen Projekten, selbst für komplexe Codebasen und lange Funktionen.
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.