C · 项目报告

FractalFir/crustc

Entirety of `rustc`, translated to C.

已完成 打开 GitHub
F
357星标
7Fork
4Issue
未知许可证

分析结果

项目分析

crustc 是一个概念验证/展示型项目:作者将完整的 rustc 1.98.0-nightly 转译成约 4600 万行 C 代码,并可通过 GCC + make 构建出一个可运行的 Rust 编译器。该仓库本身不是通用的 Rust-to-C 工具链,而是作者私有/未发布的 cilly 工具链能力展示,重点证明 Rust 编译器本身也可以被翻译为 C 并运行。

适用领域 编译器技术 / Rust 工具链 / Rust 到 C 转译 / 嵌入式与冷门平台移植 / 交叉编译 / 系统软件 / 语言运行时与 ABI / LLVM/rustc 研究
配置难度 高。该项目面向熟悉 Rust 编译器、LLVM、C 工具链、ABI、动态链接和交叉编译的开发者。普通 Rust 用户不适合作为日常编译器使用;构建和排错都需要较强系统软件经验。
商业价值 短期商业价值有限,因为它目前主要是技术展示,且核心 cilly 工具链未公开、稳定性和授权情况不明确。但长期价值较高:如果 cilly 成熟,可能为 Rust 打开大量旧硬件、嵌入式、工业控制、非主流 OS、专有平台和无 LLVM 后端环境的市场,降低企业在冷门平台采用 Rust 的阻力。对做编译器、嵌入式工具链、Rust 迁移和安全系统软件的团队具有较强战略研究价值。
01

技术亮点

  • 非常有冲击力的技术演示:完整 rustc 被翻译为 C 并可由 GCC 构建运行。
  • 展示了 Rust-to-C 后端在超大型真实 Rust 项目上的潜力。
  • 目标直指 Rust 在旧硬件、冷门 OS、无 LLVM 后端平台上的可移植性问题。
  • cilly 的设计思想是适配具体 C 编译器,通过 witness programs 探测 C 编译器和平台能力,而不是假设现代 C/LLVM 环境。
  • 支持网络透明的远程 C 编译器交互思路,可用于没有成熟交叉编译器的平台。
  • 可生成 makefile,使 Rust 代码最终能以 C 编译器和 make 的方式构建。
  • README 对 ABI、平台布局、C 语言限制和已知问题有较清楚说明,适合深入研究。
02

目标用户

  • 编译器开发者
  • Rust 工具链研究者
  • 需要在旧硬件或冷门平台上运行 Rust 的系统开发者
  • 嵌入式/复古计算/非主流 OS 开发者
  • 对 Rust bootstrap、ABI、代码生成后端感兴趣的研究人员
  • 希望了解 Rust-to-C 可行性的技术团队
03

配置要求

  • 强依赖特定 Rust nightly:nightly-2026-06-16,对应 rustc 1.98.0-nightly c712ea946。
  • 需要匹配的 LLVM 动态库:libLLVM.so.22.1-rust-1.98.0-nightly。
  • 当前仓库生成的 C 代码主要面向作者机器环境:aarch64 Linux。
  • 需要较新的 GCC;作者使用 GCC 13.3.0,其他版本未充分验证。
  • 需要 GNU make。
  • 运行时需要正确设置 LD_LIBRARY_PATH,包含 Rust nightly 工具链 lib 目录和 ./rustc_driver。
  • 不建议开启优化编译,README 明确提到优化可能触发 bug 且会显著拖慢构建。
  • 构建规模极大,约 4600 万行 C,要求较高 CPU、内存、磁盘和编译时间预算。
04

适用场景

  • 研究 rustc 被翻译为 C 后的构建和运行方式
  • 验证 Rust-to-C 编译后端在大型真实项目上的可行性
  • 探索没有 LLVM/GCC 后端支持的平台如何间接获得 Rust 支持
  • 评估通过 C 编译器作为中间层进行 Rust 移植的可能性
  • 学习 Rust ABI、类型布局、平台特性探测、C 编译器适配等底层问题
  • 作为 cilly 工具链未来能力的技术预览
05

部署与配置

  • 准备 Linux aarch64 环境;README 中作者使用的是 Ubuntu 24.04 系列、aarch64、GCC 13.3.0、LLD 18.1.3。
  • 安装 GNU make、GCC,以及 rustup。
  • 安装指定 nightly 工具链:rustup install nightly-2026-06-16。
  • 确认存在 LLVM 动态库 libLLVM.so.22.1-rust-1.98.0-nightly,通常位于 ~/.rustup/toolchains/nightly-2026-06-16-aarch64-unknown-linux-gnu/lib。
  • 执行构建命令:make -j20 LLVM_LIB_DIR=~/.rustup/toolchains/nightly-2026-06-16-aarch64-unknown-linux-gnu/lib。
  • 如需调试信息可使用:make -j20 CFLAGS=-g LLVM_LIB_DIR=对应路径。
  • 测试 rustc 是否可运行:LD_LIBRARY_PATH=~/.rustup/toolchains/nightly-2026-06-16-aarch64-unknown-linux-gnu/lib:./rustc_driver ./rustc/rustc --version。
  • 如果需要编译普通 Rust 程序,还需要构建或提供对应目标的标准库;README 建议参考 BUILDING_STD.md。
06

风险与注意事项

  • 项目明确是 demo/teaser,不是稳定生产工具。
  • 完整 cilly 工具链尚未公开,用户无法直接将自己的任意 Rust 项目转换为 C。
  • 当前生成的 C 代码与平台强绑定,README 表明该构建针对 ARM64 Linux,不具备直接跨平台复用能力。
  • 仓库规模和代码量极大,维护、审查和调试成本非常高。
  • 构建依赖非常具体的 nightly 与 LLVM 版本,环境稍有偏差可能失败。
  • 存在已知 bug:在仓库根目录运行 crustc 可能因路径 canonicalization 问题崩溃。
  • 优化编译可能触发问题,说明稳定性和正确性仍有风险。
  • ABI 兼容性只是 mostly compatible,尤其在 arm64 上存在 C 无法表达某些 rustc ABI 选择的问题。
  • 许可证字段为空,商业或再分发使用前需要确认授权。
  • 安全和供应链角度需要谨慎:超大规模生成 C 代码难以人工审计。

历史记录

热榜历史快照

2026-07-05 第16名 新收录 · github_search
2026-07-04 第20名 新收录 · github_search