公告:Rust 1.88.0 发布 - 稳定了 If-Let Chain 和 naked functions
新增 If-Let Chain
功能,允许在 if
和 while
条件中使用 &&
连接 let
语句,简化代码结构,但仅在Rust 2024版中可用。
if let Channel::Stable(v) = release_info()
&& let Semver { major, minor, .. } = v
&& major == 1
&& minor == 88
{
println!("`let_chains` was stabilized in this version");
}
支持 naked functions
,通过 #[unsafe(naked)]
属性和 naked_asm!
宏,实现对函数汇编代码的完全控制,适用于系统软件开发。
#[unsafe(naked)]
pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
// Equivalent to `a.wrapping_add(b)`.
core::arch::naked_asm!(
"lea rax, [rdi + rsi]",
"ret"
);
}
cfg
配置语言现支持布尔值 true
和 false
,使条件编译更直观。
Cargo引 入自动缓存清理机制,自动清理长时间未访问的缓存文件,减少磁盘占用,但离线模式除外。
此外,还稳定了多个 API,包括 Cell::update
、HashMap::extract_if
等,并在常量上下文中稳定了一些之前稳定的 API。
阅读:https://blog.rust-lang.org/2025/06/26/Rust-1.88.0/
Reddit:https://www.reddit.com/r/rust/comments/1ll7e0m/rust_1880_is_out/
Corrode 播客:1Password 的 50 万 Rust 代码、600 个 crates、100 名工程师,如何保障数百万个密码
1Password的高级Rust工程师Andrew Burkhart分享了他们如何使用Rust来保护数百万用户的密码和机密信息。
他们在所有客户端应用(包括Mac、Windows、Linux、Web、Android、iOS和浏览器扩展)中部署了超过50万行Rust代码,并维护约600个由近100名工程师开发的Rust代码包。
1Password的“核心”后端完全用Rust运行,每天处理数百万请求。他们还开发了如typeshare和zeroizing-alloc等知名开源包,分别用于跨语言类型生成和安全内存管理。
Andrew三年前加入1Password时没有Rust经验,现在负责构建处理云与客户端数据同步的关键异步基础设施。
团队维护多种工具和服务,如CLI工具、开发产品、Trelica、Kolide等,所有这些都由Rust核心驱动。
收听:https://corrode.dev/podcast/s04e06-1password/
文章《proc macro 将生成多少代码?》
作者:Nicholas Nethercote(Rust 编译器优化专家)
这篇文章介绍了Rust中过程宏(proc macro)对编译时间的影响,并展示了一个新工具(Rust 编译器标志)-Zmacro-stats
,用于量化过程宏生成的代码量。
文章指出,过程宏虽然强大但会增加编译时间,主要体现在四个方面:过程宏自身的编译时间、依赖项的编译时间、过程宏调用的运行时间以及生成代码的编译时间。
作者通过实际案例展示了如何使用-Zmacro-stats
来分析和优化编译时间,发现某些过程宏如serde::Deserialize
和arbitrary::Arbitrary
会生成大量代码,显著增加编译时间。
阅读:https://nnethercote.github.io/2025/06/26/how-much-code-does-that-proc-macro-generate.html
Reddit:https://www.reddit.com/r/rust/comments/1lks869/how_much_code_does_that_proc_macro_generate/
文章《为什么 Rust 编译很慢?》
作者:sharnoff
本文探讨了Rust编译器速度慢的原因,并分享了作者在优化编译时间方面的经验。
作者通过分析编译过程中的时间消耗,发现链接时优化(LTO)和LLVM的代码优化是主要的时间消耗点。
通过调整编译器设置,如禁用LTO、降低优化级别,以及对代码进行重构,作者成功将编译时间从最初的175秒降低到9.1秒。
此外,作者还尝试了不同的编译器标志和工具,如-Zshare-generics
和更换Linux发行版,进一步优化了编译时间。
文章最后指出,尽管Rust编译器的优化空间仍然存在,但通过合理的配置和代码调整,可以显著提高编译效率。
阅读:https://sharnoff.io/blog/why-rust-compiler-slow
Reddit:https://www.reddit.com/r/rust/comments/1lkxad3/why_is_the_rust_compiler_so_slow/
OSDI'25 论文《Building Bridges: Safe Interactions with Foreign Languages through Omniglot》
- presentation:https://www.usenix.org/conference/osdi25/presentation/schuermann
- 博客文章:https://www.usenix.org/publications/loginonline/memory-safety-merely-table-stakes
- 仓库:https://github.com/omniglot-rs/omniglot
暂时还没有看到发布的论文。主要是研究 Rust 与 C FFI 中的类型安全与内存安全问题。
Omniglot:第一个能够在存在未经修改且不受信任的外部库的情况下有效维护 Rust 安全性和 soundness 的框架。 它通过集成内存隔离原语和验证基础架构来促进与外部代码的交互,并避免了诸如复制或序列化等高开销的操作。 作者将 Omniglot 用于两个系统:集成到 Tock 嵌入式操作系统内核、在 Linux 用户空间应用程序中的使用情况。 Omniglot 的性能与提供较弱保证的方法相当,并且明显优于提供类似安全保证的方法。
核心技术:采用运行时验证来确保任何跨语言交互不会破坏 Rust 的不变量
- 类型包装器来验证类型不变量
- 集成了内存隔离原语(例如 x86 的内存保护键或 RISC-V 的物理内存保护单元),以防止存在缺陷或恶意的外部库写入 Rust 的任何内存
- FFI 的指针别名:静态推断何时允许引用读取或写入外部内存来支持 Rust 的别名使用限制
它的性能与现有的基于内存隔离的方法相当(开销增加了 0% 到 3.4%),同时提供了更强大的安全保障。 与之前利用进程间通信 (IPC) 和序列化来交换数据与不受信任组件交互的方法相比,Omniglot 的性能显著提升。
此外,该作者还有一篇论文研究 Rust FFI
- SOSP '23《Encapsulated Functions: Fortifying Rust's FFI in Embedded Systems》
- https://leon.schuermann.io/publications.html
讨论:Associated traits 让 Rust 进一步拥有 higher-kinded types
impl<A: Hash + Eq> Functor<A> for HashSet<A> {
type Collection<T> = HashSet<T>;
trait Constraint = Hash + Eq; // 👈 Associated traits
fn fmap<B: Self::Constraint, F: Fn(A) -> B>(self, f: F) -> Self::Collection<B> {
self.into_iter().map(f).collect()
}
}
Reddit:https://www.reddit.com/r/rust/comments/1ll9swo/associated_traits_will_bring_rust_1_step_closer/
旧 RFC:https://github.com/rust-lang/rfcs/issues/2190
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论