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条评论):开发者 FractalFir 将 rustc 1.98.0-nightly 的完整代码翻译成了 4600 万行 C 代码,且这堆 C 代码用 GCC 和 make 就能编译出一个功能完整的 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。这个编译器能编译 core、alloc、std 等 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 编译的一条可行路径。
关联推荐
- DSpark 开源:DeepSeek V4 推理速度飙升 80% — 另一个底层优化的开源项目
- 从零实现 GPT-2 规模大模型:NanoEuler — 深入理解编译器和模型底层
- Python 数据分析入门 — 从编程基础开始学习