中文

Scylla: 将 C 的某类仪表程序子集翻译为安全 Rust

编程语言 2026-02-26 v2

摘要

Rust 语言的流行度持续迅猛发展;然而,许多关键代码库仍以 C 语言编写。自动将 C 翻译为 Rust 因此显得非常诱人。已有多项工作沿着这一路径发展,不断扩大处理 C 子集的范围,通过多种 Rust 功能实现,其中包括 unsafe 功能。尽管自动化的前景令人期待,但依赖 unsafe 的生成代码会消除 Rust 提供的内存安全保障,从而抵消将现有代码库移植到内存安全语言的主要优势。我们采取了不同的方法,即程序员逐步迭代原始 C 代码,使其逐渐更结构化,直至能够编译为安全的 Rust。这意味着可以在现有测试套件和生产环境中逐步评估重构和重写的性能和正确性。将结构化 C 编译为安全的 Rust 依赖于以下贡献:一种从 C(子集)到安全 Rust 的类型导向翻译;一种基于“split trees”的新型静态分析,允许使用 Rust 的切片和分割运算来表达 C 的指针运算;一种推断哪些引用需要可变的分析;以及一种与 Rust 对非拥有和拥有分配区别相容的 C 指针类型编译策略。我们在真实世界的密码学库、二进制解析器和序列化器,以及文件压缩库上进行评估。我们展示,这些库可通过对原始 C 代码进行小幅度重构来翻译为 Rust, resulting Rust 代码在性能特征上与原始 C 代码相似。作为翻译过程的一部分,我们还在 bzip2 压缩库和 Microsoft 实施的 FrodoKEM 密码学原始语料中识别并报告了未定义行为。

关键词

引用

@article{arxiv.2412.15042,
  title  = {Scylla: Translating an Applicative Subset of C to Safe Rust},
  author = {Aymeric Fromherz and Jonathan Protzenko},
  journal= {arXiv preprint arXiv:2412.15042},
  year   = {2026}
}

备注

OOPSLA 2026 camera-ready version