makepad/relax
开发工具用 Rust 写的实时编译器与 JIT 运行时,直接从源码运行 Cargo 包,并在运行时热更新改动函数。
项目介绍
Relax 尝试替换 Rust 传统工具链:它对 Cargo 包做词法、语法、类型与借用检查,然后在每个函数首次被调用时编译它,文件保存后再把改动过的函数热补丁进正在运行的进程。整个流程不需要 rustc、LLVM 或系统链接器,以单个无 crates.io 依赖的 Rust 库形式发布。代码生成支持 x86-64 和 AArch64,适合要求快速编辑—运行—测试循环的场景,包括多个 AI agent 并行开发的流水线。
快速使用
需要稳定的 Rust 工具链。从克隆开始构建 runner,再新建并运行一个包:
git clone https://github.com/makepad/relax
cd relax
cargo build --release --manifest-path Cargo.toml -p relax-runner --bin relax
cd /tmp
cargo new hello
cd hello
/path/to/relax/target/release/relax run --quiet hello
/path/to/relax/target/release/relax test hello
/path/to/relax/target/release/relax check hello
relax 要在包目录内运行,参数是包名而非路径;runner 会从构建它的检出目录读取 Relax 的 std,因此不要移动 relax 文件夹。按维护者的测量,hello 第一次 relax run 在 16 核 x86-64 Linux 上耗时 0.24 秒,在 10 核 arm64 Mac 上 0.97 秒;后续运行分别为 0.01–0.07 秒和 0.03–0.04 秒 (L280-L320)。
使用约束
- 性能:优化后的 Relax 代码仍慢于面向本机 CPU 的 rustc
--release。多项已测负载为 1.14–1.26 倍,稠密数值核因尚未做循环向量化为 2.29 倍 where LLVM still wins。与普通可移植--release的对比尚未测量。 - 平台:代码生成覆盖 x86-64 和 AArch64;维护者测试的构建与测试在 Linux x86-64 和 macOS arm64 上通过,Windows 未测试。
- 语言覆盖:并非所有代码都能编译,已知缺口列出了暂不支持的情况及复现。
- 原生代码:必须保持原生的 crate(OS、GPU、音频)通过
#[relax_api]和 C ABI 与 JIT 代码交互。 - 网络与缓存:无依赖的包可离线运行;crates.io 依赖会被下载并按索引 SHA-256 校验,除非开启离线模式。编译产物写入包的
target/makepad-run,hello约 120–190 MB,relax clean可删除。 - 许可证:MIT,随附的 std 源码有单独声明 LICENSE。
HotRepo 点评
Relax 的替换范围很大:rustc、LLVM、链接器和相当一部分 Cargo 都由它接管。README 也坦承当前生成的代码在稳态下仍慢于 LLVM,并正在重新测量。2026-11-12 的 Rust 新项目快照记录到 100 星、4 个 fork,但仓库创建于 2026-11-11,这份数据反映的是发布初期的关注,不能据此判断采用情况;该项目也没有全语言日榜名次可对比。更合适的定位是实验性工具链:对缩短编辑—测试循环有价值,但还不是发布构建的替代品。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。