一款用 PHP 编写的 Rust 编译器,可直接生成 x86-64 Linux ELF 可执行文件(无需 LLVM、无需汇编器、无需链接器)。
实现了所有权检查、借用检查、类型检查、移动语义、泛型、特征、闭包和迭代器。如果你需要在 2008 年的共享主机服务器上编译 Rust,而唯一安装的运行时是 PHP,那么它将非常有用。
要运行 Rust 代码,首先当然需要安装 PHP。在 Windows 11 上可以用以下命令快速安装:
winget install PHP.PHP.8.4
这个编译器生成的是 Linux 平台的原生机器码,所以如果你用的是 Windows,最实用的方式是搭配 WSL(Windows Subsystem for Linux)。 先安装 Ubuntu(如果还没装过):
wsl --install
安装完成后重启电脑,然后从开始菜单打开 Ubuntu 完成初始设置。
编译一个 .rs 文件:
php rustc.php main.rs -o main
然后在 WSL 中运行生成的二进制文件:
wsl ./main
查看程序的退出码:
wsl ./main; echo $?
我这里编写一个 HelloWorld.rs 文件
fn main() {
println!("开源技术小栈!");
}
用 PHP 运行编译器编译上面的HelloWorld.rs 文件
php rustc.php HelloWorld.rs -o HelloWord
Windows 用户推荐在 WSL 中运行,执行二进制
wsl ./HelloWord
这会生成一个 HelloWord 可执行文件(Linux x86-64 ELF 格式)。
输出应该为
开源技术小栈!

支持的类型
i32、bool、u8、u16、u32、u64、u128、usizeString(堆分配字符串,支持移动语义)&str 和字符串切片,支持索引(如 s[0])&T、&mut T 引用,包含借用检查match)()(可用于表达式、返回类型、泛型参数)Option<T> 和 Result<T, E>(支持 Some/None、Ok/Err,无需在源码中定义)控制流
if / else(可作为表达式使用)while、loop、break、continuefor x in start..end(范围迭代)match(支持枚举分支和通配符 _)return函数与闭包
const fn(被接受,但按普通函数处理)impl 块支持 self、&self、&mut selfimpl Trait for Type|x: i32| x + captured_var)所有权与借用
Copy 类型的移动语义Copy 自动推导(适用于 i32、bool、&T 以及字段全部可复制的结构体/枚举)模块与语法
mod name; 文件模块声明(基于文件系统的模块解析)pub 可见性控制(函数、结构体、字段)use 路径导入(跨模块引用)#[...] 和 #输出方式
println!("{}", expr) —— 目前仅支持单个 {} 占位符,打印一个值exit(code) —— 显式退出程序并返回状态码运行完整测试套件:
php tests/run.php
测试用例位于 tests/cases/ 目录下,分为 fundamentals/valid/、fundamentals/invalid/、modules/、programs/ 等子目录。
每个 .rs 文件顶部用注释标明预期结果,例如:
// exit: 42
// stdout: hello
// error: Use of moved value
+=、-=、*=、/= 等)Vec<T> 与堆内存分配f32 / f64const 和 static 项? 运算符(虽然 Result 已支持,但 ? 语法尚未实现)fn apply(f: impl Fn(i32) -> i32))|| expr)println! 格式支持(目前只支持单个 {} + 一个参数)i8、i16、i64、i128)https://github.com/mrconter1/rustc-php