← 返回内容列表

crustc:将 Rust 编译器整体翻译为 4600 万行 C 代码

crustc:将 Rust 编译器整体翻译为 4600 万行 C 代码

开发者 FractalFir 在 GitHub 上发布了 crustc 项目——将 Rust 编译器(rustc)的完整代码翻译为 4600 万行 C 代码,且生成的 C 代码可以用 GCC 编译出一个功能完整的 Rust 编译器。这背后是他三年开发的 cilly 工具链,目标是让 Rust 代码能编译到任意有 C 编译器的平台,包括 Plan9 等小众系统。

2026年7月3日,一个名为 crustc 的项目登上 HN 首页(325分,62条评论):开发者 FractalFirrustc 1.98.0-nightly 的完整代码翻译成了 4600 万行 C 代码,且这堆 C 代码用 GCCmake 就能编译出一个功能完整的 Rust 编译器。

这到底是什么

crustc 不是一个 Rust 到 C 的转译器,而是 cilly 工具链的演示项目。cilly 是 FractalFir 花了三年时间、经过 14 次尝试开发的 Rust 编译器后端插件,能将 Rust 代码编译为 C 代码。crustc 则是 cilly 编译自身的产物——用 Rust 编译器编译自身,生成 C 代码

生成的 C 代码可以用 GCC 13.3.0 编译,编译完成后运行 ./rustc --version 会正确输出 rustc 1.98.0-nightly。这个编译器能编译 coreallocstd 等 Rust 标准库。

为什么要这样做

FractalFir 的核心目标是为 老旧/小众硬件 提供 Rust 支持。目前 Rust 依赖 LLVM 后端,而 LLVM 不支持所有平台。许多嵌入式系统、遗留操作系统(如 Plan 9)有 C 编译器但没有 LLVM 支持,因此无法使用 Rust。

cilly 的策略是:既然几乎所有平台都有 C 编译器,那么把 Rust 编译成 C 就能在这些平台上运行 Rust 代码。这直接解决了"Rust 不支持 Plan 9"这类争论。

技术亮点

cilly 最独特的创新是自适应 C 编译器。它不假设目标平台的类型大小、对齐方式、字符编码或整数格式,而是生成"见证程序"来检测编译器和平台支持什么:

/* This compiles if and only if our C compiler supports _Thread_local. */
_Thread_local int KEYWORD_TLS_SUPPORTED;

这意味着 cilly 生成的 C 代码能让你的"奇怪 C 编译器"也能正常工作,而不需要假设任何超出 ANSI C 的特性。

网络透明编译

更酷的是 cilly 支持网络透明编译。你可以在正常的 Linux 上运行 rustc,让 cilly 通过 TCP 与目标平台上的 C 编译器通信。FractalFir 已经用这种方式在 Plan 9 虚拟机上成功编译了 Rust 程序。

当前状态

cilly 工具链本身尚未公开发布。FractalFir 坦言他还在修复一些优化相关的 bug,而且最近生活比较忙碌——找到了工作、要写论文、还把手放进了搅拌机(手指保住了,只是缝了几针)。但 crustc 作为演示项目已经证明了技术可行性。

这个项目在 HN 上引发了关于 Rust 可移植性、编译器 bootstrap 悖论、以及 C 作为"通用汇编语言"地位的深入讨论。无论 cilly 何时正式发布,crustc 已经展示了 Rust 到 C 编译的一条可行路径。

关联推荐

crustc:将 Rust 编译器整体翻译为 4600 万行 C 代码 | 必学必会