CRUST-Bench : Un benchmark complet pour la transpilation de C vers Rust sécurisé
CRUST-Bench: A Comprehensive Benchmark for C-to-safe-Rust Transpilation
April 21, 2025
Auteurs: Anirudh Khatry, Robert Zhang, Jia Pan, Ziteng Wang, Qiaochu Chen, Greg Durrett, Isil Dillig
cs.AI
Résumé
La transpilation de C vers Rust est essentielle pour moderniser le code C hérité tout en améliorant la sécurité et l'interopérabilité avec les écosystèmes modernes de Rust. Cependant, il n'existe actuellement aucun jeu de données permettant d'évaluer si un système peut transpiler du C en Rust sûr tout en passant une série de tests. Nous présentons CRUST-Bench, un jeu de données de 100 dépôts C, chacun accompagné d'interfaces écrites manuellement en Rust sûr ainsi que de cas de test permettant de valuer la correction de la transpilation. En considérant des dépôts entiers plutôt que des fonctions isolées, CRUST-Bench capture les défis liés à la traduction de projets complexes avec des dépendances réparties sur plusieurs fichiers. Les interfaces Rust fournies offrent des spécifications explicites garantissant le respect des modèles idiomatiques et sûrs de Rust, tandis que les cas de test associés assurent la correction fonctionnelle. Nous évaluons les modèles de langage de pointe (LLMs) sur cette tâche et constatons que la génération de Rust sûr et idiomatique reste un problème difficile pour diverses méthodes et techniques de pointe. Nous fournissons également des insights sur les erreurs que les LLMs commettent généralement lors de la transpilation de code de C vers Rust sûr. Le modèle le plus performant, OpenAI o1, ne parvient à résoudre que 15 tâches dans un contexte de single-shot. Des améliorations sur CRUST-Bench conduiraient à des systèmes de transpilation plus performants, capables de raisonner sur des scénarios complexes et d'aider à migrer des bases de code héritées de C vers des langages comme Rust, qui garantissent la sécurité mémoire. Vous pouvez trouver le jeu de données et le code à l'adresse suivante : https://github.com/anirudhkhatry/CRUST-bench.
English
C-to-Rust transpilation is essential for modernizing legacy C code while
enhancing safety and interoperability with modern Rust ecosystems. However, no
dataset currently exists for evaluating whether a system can transpile C into
safe Rust that passes a set of test cases. We introduce CRUST-Bench, a dataset
of 100 C repositories, each paired with manually-written interfaces in safe
Rust as well as test cases that can be used to validate correctness of the
transpilation. By considering entire repositories rather than isolated
functions, CRUST-Bench captures the challenges of translating complex projects
with dependencies across multiple files. The provided Rust interfaces provide
explicit specifications that ensure adherence to idiomatic, memory-safe Rust
patterns, while the accompanying test cases enforce functional correctness. We
evaluate state-of-the-art large language models (LLMs) on this task and find
that safe and idiomatic Rust generation is still a challenging problem for
various state-of-the-art methods and techniques. We also provide insights into
the errors LLMs usually make in transpiling code from C to safe Rust. The best
performing model, OpenAI o1, is able to solve only 15 tasks in a single-shot
setting. Improvements on CRUST-Bench would lead to improved transpilation
systems that can reason about complex scenarios and help in migrating legacy
codebases from C into languages like Rust that ensure memory safety. You can
find the dataset and code at https://github.com/anirudhkhatry/CRUST-bench.Summary
AI-Generated Summary