内容提要
本期介绍四个Rust项目:spared在Wasm沙箱中托管多个带SQLite的Rust Web应用,数据隔离好、延迟低,但仅支持明文HTTP;Relax是实时JIT运行时,跳过rustc直接运行Cargo包,支持热更新与调试工具,性能约为release版的1.14–1.26倍;另有一篇关于用内存安全Rust编写严格时限嵌入式软件的博士论文;Zellij 0.46新增内置终端,并可作为库嵌入应用。
延伸解读
spared 的隔离优势与规模代价
spared 将 SQLite 随应用放入 Wasm 沙箱,数据隔离更彻底,热请求中位延迟比 workerd 快 2.6 倍。但每个应用自带一份 SQLite,应用数超过约 20 个后内存占用反超 workerd,200 个应用时达 889 MiB。沙箱内 SQLite 的 CPU 开销约为原生 1.85 倍,且仅提供明文 HTTP,需前置代理。适合应用数量有限、重视隔离与延迟的自托管场景。
Relax 的编辑—运行循环收益与限制
Relax 跳过 rustc 直接运行 Cargo 包,函数首次调用时编译,热点在运行中优化,源码修改可热补丁并保留状态。大型 3D 游戏从干净检出到第一帧仅 11 秒,而 rustc 加 Cargo 约需 3 分钟。但优化后代码比 release 慢 1.14–1.26 倍,密集数值循环慢约 2.3 倍,且结构体布局、trait 或宏改动需重启会话。它面向开发调试,发布仍用 release 构建。
内存安全 Rust 用于严格时限嵌入式的可行性
坦佩雷大学博士论文以可预测微控制器 Atalanta 为例,用时序模型将任务开始前的最大延迟计算到时钟周期,表明内存安全编程与精确时序并非互斥。这为汽车、工厂机械等时序关键设备的开发者提供了用 Rust 替代 C 的潜在路径,有望兼顾安全性与可预测性。论文将于 2026 年 11 月 30 日公开答辩。
Zellij 0.46 从终端复用器转向可嵌入库
Zellij 0.46 内置终端,可完全替换现有终端,并新增 attention inbox 和 session previews。Distributions 功能允许 Rust 开发者将 Zellij 作为库引入项目,渲染自定义终端界面,既能运行在另一终端中,也能独立运行,并支持跨平台分发与白标。这使 Zellij 从单纯的终端复用器扩展为构建终端风格应用的底层组件。
Q&A
spared 是什么?它和 Cloudflare Workers 有什么区别?
spared 是一个开源的 Rust Web 应用宿主,每个应用及其 SQLite 数据库运行在独立的 Wasm 沙箱中。作者将其比作可自托管的 Cloudflare Workers 加 Durable Objects,但强调数据隔离更好:SQLite 随应用跑在沙箱里,而不是放在宿主中。
Relax 如何实现不经过 rustc 直接运行 Cargo 包?
Relax 是一个用 Rust 编写的实时编译器和 JIT 运行时,它直接从源码运行 Cargo 包,跳过 rustc、LLVM 和链接器。函数在第一次被调用时编译,热点在运行期间继续优化,源码修改可以热补丁到运行中的进程并保留状态。
Relax 的性能表现如何?和 release 版本相比差多少?
Relax 优化后的代码大约比针对本机 CPU 的 --release 版本慢 1.14–1.26 倍,密集数值循环约慢 2.3 倍,且尚未做向量化。在 M4 MacBook 上,一个大型 3D 游戏从干净检出到第一帧,Relax 用时 11 秒,而 rustc 加 Cargo 大约先构建 3 分钟再启动。
Zellij 0.46 的 Distributions 功能有什么用途?
Distributions 功能允许 Rust 开发者将 Zellij 作为库引入自己的项目,用于构建跨平台应用。应用可以渲染用 Rust 编写的自定义终端界面,既能在另一个终端中运行,也能独立运行,跨平台分发由该功能处理,还可以去掉 Zellij 品牌和界面实现完全白标。
用 Rust 编写严格时限的嵌入式软件可行吗?
根据坦佩雷大学 Henri Lunnikivi 的博士论文研究,使用内存安全的 Rust 为基于开放 RISC-V 架构的处理器编写严格时限的嵌入式软件是可行的。论文以可预测微控制器 Atalanta 为例,用时序模型将任务开始前的最大延迟计算到时钟周期,表明内存安全编程与精确时序并非互斥。
spared 目前有哪些限制和不足?
spared 当前版本是 0.0.1-preview,仅支持明文 HTTP,没有 TLS,需要在前面加代理。每个应用一次只处理一个请求,不同应用可以并行。沙箱里的 SQLite 大约比原生 SQLite 多 1.85 倍 CPU。应用数超过约 20 个时内存占用会高于 workerd。项目还没有外部审计,不适合托管一旦沙箱失效就会造成严重损害的代码。