文章摘要
该项目将Rust编译器rustc的完整代码翻译为约4600万行C代码,可用GCC和make编译,生成一个功能完整的Rust编译器,能够编译core、alloc、std等标准库组件。这是作者新开发的Rust到C编译器工具链的演示。
文章总结
项目概述:将Rust编译器rustc转换为C语言
该项目成功将Rust编译器rustc 1.98.0-nightly(约4600万行代码)转换为C语言,生成的功能完整的Rust编译器可以用GCC和make构建。编译后的C代码能够正常工作,可以编译Rust标准库(如core、alloc、std)等。
技术原理
这是作者开发的Rust转C编译器工具链cilly的演示版本。cilly是一个Rust库,用于生成C代码并作为Rust编译器后端插件。其核心创新在于能够适应不同的C编译器——通过生成“见证”程序来检测目标编译器和平台支持的特性,从而生成兼容的C代码。
项目目标
主要目的是支持那些没有LLVM/GCC支持的老旧或罕见硬件平台。这些平台虽然不支持Rust,但通常支持C。cilly工具链可以实时将Rust代码转换为C,用户只需指定目标平台使用的C编译器即可。
网络透明性
cilly支持网络透明操作,可以通过TCP(甚至可能扩展到UART等)与C编译器通信。这解决了引导悖论问题——可以在普通平台(如Linux)上运行rustc,通过cilly与远程目标平台(如Plan9)的C编译器通信,从而为这些平台编译Rust程序。
构建与使用
项目需要提供LLVM库路径,使用GCC和make构建。编译速度较快(无优化时约几分钟),但启用优化可能会在某些大型Rust文件上卡住。生成的编译器基本ABI兼容,但在某些平台(如ARM64)上存在细微差异。
评论总结
根据评论内容,主要观点和论据如下:
1. 项目价值与创新性(高认可度) - 评论7:认为这是"原创艺术品",将Rust转译为C比LLVM IR更易实现,且利用GCC优化可行。 - 评论12:前C++编译器开发者"衷心赞同"该项目。
2. 应用场景:老旧/小众硬件支持(核心目标) - 评论3:项目主要目标是为"没有LLVM/GCC支持的老旧/小众硬件"提供Rust支持,如Plan 9系统。 - 评论4:提及可跨网络和设备编译,"在Blorbo OS上构建小型C服务器,在Linux上运行rustc,通过cilly通信"。
3. 可引导性(Bootstrappability)价值(高认可度) - 评论6:该项目可大幅简化Rust编译器的可引导性,"比之前通过OCaml等途径容易得多"。 - 评论5:建议用"双重编译(DDC)"测试官方Rust编译器是否存在后门。
4. 潜在局限与质疑(中等认可度) - 评论13:认为针对不受Rust支持的异类系统(如嵌入式、大型机),用户可能"不愿信任测试版转译器"避免引入漏洞。 - 评论2:对作者未详细说明左手受伤经历表示遗憾,"本可以写一篇文章"。
5. 其他技术讨论 - 评论8:指出LLVM曾有C后端可用于转译,但已长期未维护,近期可能恢复。 - 评论9:询问是否可用于不支持LLVM的PPC Mac OS X系统。