Search papers, labs, and topics across Lattice.
This paper presents &inator, a novel approach for translating C program interfaces to Rust, addressing the complexities of Rust's ownership and borrowing rules. By employing a constraint-based formulation of semantic equivalence and type correctness, &inator ensures that the generated Rust interfaces are both correct and precise, facilitating modular and incremental translation of system software. The results demonstrate that &inator can successfully produce accurate Rust interfaces for real C programs, although it acknowledges challenges in supporting certain C features and scaling to larger codebases.
Achieving correct and precise C-to-Rust interface translation could revolutionize how system software is ported to safer languages.
Automatically translating system software from C to Rust is an appealing but challenging problem, as it requires whole-program reasoning to satisfy Rust's ownership and borrowing discipline. A key enabling step in whole-program translation is interface translation, which produces Rust declarations for the C program's top-level declarations (i.e., structs and function signatures), enabling modular and incremental code translation. This paper introduces correct, precise C-to-Rust interface translation, called &inator. &inator employs a novel constraint-based formulation of semantic equivalence and type correctness including borrow-checking rules to produce a Rust interface that is correct (i.e., the interface admits a semantics-preserving implementation in safe Rust) and precise (i.e., it uses the simplest, least costly types). Our results show &inator produces correct, precise Rust interfaces for real C programs, but support for certain C features and scaling to large programs are challenges left for future work. This work advances the state of the art by being the first correct, precise approach to C-to-Rust interface translation.