Rust 与 C 的语言之争吵了十年,各有各的阵地。一个学术项目选了第三条路,用 Rust 写代码,编译出人类可读的 C 交付。这个叫 Eurydice 的转译器上周被技术媒体长文报道,去年底的技术社区大讨论串近两百分。我把项目文档、作者博文与报道原文读了一遍,这个工具的思路对特定人群是真解药。
它怎么工作
先摆正定位,Eurydice 是转译器而非独立编译器。前端复用 Rust 官方编译器的流程提取程序中间表示,随后做类型驱动的翻译,进入一个来自形式化验证生态的 C 代码提取器内部结构,最后经三十多个小步骤从 Rust 语义逐步降到 C,其中约一半步骤复用既有设施。基础设施家底来自一个形式化验证语言生态,那边那个 C 代码提取器打磨了十年,Eurydice 站在它肩膀上,只补 Rust 到中间层这段落差,工程量分配得很聪明。可读性刻在流程里,产出 C 代码像手写,命名、结构、注释体例都为下游审计与维护设计,结构体命名与控制流形状原样保留,读起来像同事的手笔。
保证与限制都要说清。官方的非正式承诺是,Rust 程序正常终止则 C 代码给出相同结果且无未定义行为,Rust 程序一旦 panic 则对 C 代码行为不做任何保证。仅支持 Rust 的一个子集,构建链较重,推荐用 Nix 环境拉起。工程上是能用的玩具与研究工具之间的位置,距离日常业务开发还有距离。仓库归属一个学术验证项目群,主维护者是微软研究院研究员,也是被复用那个提取器的原作者,另一位主力贡献者参与写过验证项目论文,学术班底保证这条路线能长期走下去,社区讨论区也活跃。
旗舰用例与源流
最能说明价值的是密码学场景。一个后量子密码算法用 Rust 编写并经形式化验证,经 Eurydice 编译成 C 后进入知名开源密码库,最终被浏览器底层安全库采用。再补一个背景,流水线终点是浏览器用户天天在用的安全连接,你此刻读这篇文章,连接加密就可能经过它编译出来的代码,学术工具到日常基础设施之间,距离比想象中近。写 Rust 享受内存安全,交付 C 满足遗留平台与构建系统,两头都不将就,中间还有形式化验证背书,这条流水线在安全关键领域是刚需。
与既有工具的分野。同类方向上的 C 转译工具要么不以可读性为目标,要么是个人实验项目,Eurydice 的差异化在可读性优先加验证生态出身。社区讨论里最常见的追问是为什么不直接出二进制库,回答指向两类真实需求,目标平台没有 Rust 工具链,以及团队不接受往既有 C 构建系统里塞进整套 Rust 依赖,前一类在嵌入式与工控场景天天见,后一类在大型存量代码库里是政治现实。
教学价值
编译原理的学生看它是活教材,三十多个小步骤每步职责单一,比教科书里那种玩具编译器完整,对照着读源码,每一步输入输出都是明确中间表示,连讲义都不用买了。对安全与嵌入式工程师,它给出了一条渐进路线,新代码用 Rust 的安全写法,老系统继续吃 C,新旧共存期往往长达十年,这类桥接工具是共存期的刚需。围观语言战争的读者看它是个体面答案,正解从来是把各自长处接在同一根流水线上,等翻译质量与构建体验成熟,站队就变得不重要,不站队省下的都是心力。
提醒一句,仓库星数四百出头,学术项目维护节奏,生产采用前先读作者博客里那篇一致性测试的博文,测试通过率作者自报九成半以上,按自称口径对待,自报之外,密码学界那条产线的实际采用本身就是比数字更硬的背书。一句话收尾,工具本身小众,思路值得收藏。
来源
- 开源仓库 https://github.com/AeneasVerif/eurydice
- 技术媒体长文 https://lwn.net/Articles/1055211/
- 作者博文 https://jonathan.protzenko.fr/2025/10/28/eurydice.html
- 社区讨论 https://news.ycombinator.com/item?id=46178442