26-07-03 18:37 微博认证:科技博主

把Rust重写为C!一个将rust编译为C语言的编译器
地址:github.com/FractalFir/crustc
“这是什么?

这是一个展示/预告,用于我的新Rust到C编译器工具链。完整的cilly工具链可以将你自己的Rust代码编译为C,并支持任意目标平台。这个仓库仅展示了编译器自我编译的过程,因为我认为这是最炫酷的展示方式。

此项目的主要目标是为那些缺乏 LLVM/GCC 支持的旧式/小众硬件提供支持。目前仍有一些系统不支持 Rust,但却支持 C。
每当有项目从 Rust 迁移到 C,或者为某个 C 项目开发 Rust 替代方案时,对这些目标平台的支持不足总会被合理视为 Rust 的劣势。本项目旨在消除这一问题。

如何实现的?
过去三年里,我一直在研究如何将Rust编译为C。我公开尝试过几次(例如rustc_codegen_clr),也进行过许多未公开的尝试。

按我的统计,这是第14次尝试:cilly。它是一个用于生成C代码的Rust库,也是一个Rust编译器后端(即插件),让你能将Rust编译为C。

cilly的核心创新在于它能自适应不同的C编译器。

它可以生成"见证"程序,检查特定编译器和平台支持哪些特性:

这意味着Cilly会生成C代码,让那些"稀奇古怪的Blorbo OS专用Shminky C编译器"也能满意。
所有类型布局、大小、对齐方式、字符编码(ASCII)和整数格式(二进制补码)都会被查询。

在可能的情况下,还会提供回退方案。

我尽力避免假设任何超出ANSI C[2]范围的内容——包括对"现代"C标准中某些特性的规避(如严格别名规则)。

遗憾的是,这意味着cilly的输出是编译器相关的(即,你不能将在Arm64上生成的cilly C代码直接用于riscv32,但你可以专门为riscv32生成cilly C代码)。

这个版本的rustc(生成的C代码)"面向"ARM64 Linux,因为这是我工作站的ISA架构。

发布于 山东