【Rust日报】2026-08-25 Never 类型在 nightly 稳定
内容提要
Rust生态近期进展:never类型(!)在nightly稳定化,用于表示永不返回的计算;Firefox将用Rust实现的jxl-rs正式支持JPEG XL,替代原C++实现;OpenObserve在十亿日志基准中比ClickHouse快2.7-3.4倍;macroni框架用宏为Axum生成handler和客户端。
延伸解读
never类型稳定化的实际影响
never类型(!)在nightly的稳定化意味着Rust开发者可以更明确地表达永不返回的函数,如loop{}或panic!路径。这有助于类型推导和发散函数签名,使代码意图更清晰。虽然目前仅在nightly可用,但这一进展预示着未来稳定版中该特性的到来,对依赖此类语义的库和框架可能带来简化。
Rust在Firefox JPEG XL支持中的角色
Firefox选择用Rust重写JPEG XL解码器,主要出于安全考虑,因为原C++实现代码量大且攻击面广。jxl-rs作为核心,不仅满足了安全和高性能要求,还支持渐进式渲染。这一决策体现了Rust在系统编程中安全与性能并重的优势,也推动了JPEG XL在浏览器中的普及,与Chrome和Safari的动向形成对比。
基准测试的参考价值与局限
OpenObserve的基准显示其在十亿日志场景下查询性能优于ClickHouse,但需注意这是由OpenObserve团队自行发布的测试,可能存在偏向。测试覆盖了19条可观测性查询,几何平均快2.7-3.4倍,磁盘占用更少,但ClickHouse在少数小查询上仍有优势。读者应关注测试配置和开源代码,以评估是否适用于自身场景。
macroni的宏抽象与适用阶段
macroni通过属性宏从async方法生成Axum handler,并支持共享async trait以生成客户端,简化了Rust服务端与客户端的API契约维护。但项目目前是proof-of-concept,意味着可能未经过大规模生产验证。生成的仍是标准Axum Router,可叠加中间件,但宏的抽象可能增加调试复杂度,适合追求开发效率的早期项目。
Q&A
Rust 的 never 类型(!)在 nightly 中稳定化有什么意义?
never 类型(!)用于表示永不返回的计算,如 loop {}、panic! 和进程退出路径。它的稳定化意味着这些表达式可以更好地参与类型推导和发散函数签名,提高类型系统的表达力。
Firefox 为什么用 Rust 实现 JPEG XL 解码器?
Firefox 原本的 JPEG XL 实现是约 10 万行多线程 C++,攻击面较大。Mozilla 向 Google Research 的 JPEG XL 团队提出挑战,要求用 Rust 实现安全、高性能、体积可控且兼容的解码器后再出货。jxl-rs 完成了这一挑战,成为 Firefox JPEG XL 支持的核心。
OpenObserve 在十亿日志基准中相比 ClickHouse 表现如何?
在十亿条日志基准测试中,OpenObserve 的典型查询比 ClickHouse 快约 2.7 倍(Parquet)到 3.4 倍(Vortex),整套查询总时间约为 3.4 到 4.6 倍更短,磁盘占用约少三分之一。但 ClickHouse 在少数小查询上仍有优势。
macroni 框架是如何为 Axum 生成 handler 和客户端的?
macroni 使用类似 Rocket 的属性宏,从 async 方法或 async trait 生成 Axum handler。宏将实现类型作为 Axum state,GET 默认从 query 取参,POST 默认从 JSON body 取参,错误统一转为 JSON。对于共享 async trait,服务端提供实现并生成路由,客户端生成基于 reqwest 的实现,便于共用 API 契约。
never 类型在 Rust 中对应哪个 RFC?
never 类型对应 RFC 1216。
JPEG XL 在 Firefox 中的支持状态如何?
Firefox 已发出 JPEG XL 出货意向,将正式支持 JPEG XL。此前曾在实验开关下接入,但原 C++ 实现攻击面大,现改用 Rust 实现的 jxl-rs 作为核心。Chrome 也有出货意向,Safari 已有部分实现。