ChatPaper.aiChatPaper

CRUST-Bench: Комплексный эталонный тест для трансляции кода с C в безопасный Rust

CRUST-Bench: A Comprehensive Benchmark for C-to-safe-Rust Transpilation

April 21, 2025
Авторы: Anirudh Khatry, Robert Zhang, Jia Pan, Ziteng Wang, Qiaochu Chen, Greg Durrett, Isil Dillig
cs.AI

Аннотация

Транспиляция из C в Rust имеет ключевое значение для модернизации устаревшего кода на C, одновременно повышая безопасность и обеспечивая совместимость с современными экосистемами Rust. Однако на данный момент отсутствует набор данных для оценки способности системы транспилировать C в безопасный Rust, который проходит набор тестов. Мы представляем CRUST-Bench — набор данных, состоящий из 100 репозиториев на C, каждый из которых сопровождается вручную написанными интерфейсами на безопасном Rust, а также тестовыми случаями, которые можно использовать для проверки корректности транспиляции. Рассматривая целые репозитории, а не изолированные функции, CRUST-Bench охватывает сложности перевода сложных проектов с зависимостями между несколькими файлами. Предоставленные интерфейсы на Rust задают явные спецификации, гарантирующие соответствие идиоматичным и безопасным с точки зрения памяти шаблонам Rust, а сопровождающие тестовые случаи обеспечивают функциональную корректность. Мы оцениваем современные крупные языковые модели (LLM) на этой задаче и обнаруживаем, что генерация безопасного и идиоматичного Rust остается сложной проблемой для различных передовых методов и подходов. Мы также анализируем типичные ошибки, которые допускают LLM при транспиляции кода из C в безопасный Rust. Лучшая модель, OpenAI o1, способна решить только 15 задач в режиме однократного выполнения. Улучшения на основе CRUST-Bench приведут к созданию более совершенных систем транспиляции, способных анализировать сложные сценарии и помогать в миграции устаревших кодовых баз из C в такие языки, как Rust, которые обеспечивают безопасность памяти. Набор данных и код доступны по адресу: 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

PDF62April 24, 2025