Rust1.99.0发布,可变参数函数与内存布局优化成焦点

Rust 1.99.0 正式发布,带来了多项重要更新。新版本首次稳定支持 C ABI 可变参数函数,同时明确了通过裸指针获取非 Sized 类型布局信息的安全条件。此外,Box::leak 文档更新建...

互联网/IT

随着编程语言生态的不断演进,Rust 1.99.0 的发布再次吸引了开发者们的目光。本次版本更新不仅在语言特性上有所突破,还在生态系统层面展现了更广泛的应用前景。

可变参数函数的 ABI 兼容性提升

Rust 1.99.0 最引人注目的更新之一是对外部定义的可变参数函数的支持。此前,Rust 已经能够调用外部的可变参数函数,例如 libc::printf,但无法直接编写这类函数。从 1.99 版本开始,开发者可以使用 "C" 和 "C-unwind" ABI 定义可变参数函数,这使得 Rust 能够更好地与 C 生态系统进行交互。

需要注意的是,虽然编译器提供了类型安全的接口,但实际参数的数量和类型仍需开发者自行保证。

内存布局信息的标准化

另一个重要的更新是关于内存布局信息的查询。Rust 1.99.0 稳定了通过裸指针获取所指向值的大小和对齐要求的功能。此前,Sized 类型的布局信息可以通过 size_of::() 和 align_of::() 获取,但非 Sized 类型则需要额外的处理。

新版本引入了三个稳定的函数:Layout::for_value_raw、mem::size_of_val_raw 和 mem::align_of_val_raw,这些函数允许开发者以安全的方式查询非 Sized 类型的布局信息。不过,由于涉及底层操作,这些函数仍然需要在 unsafe 块中调用。

标准库 API 的扩展

除了核心语言特性的改进,Rust 1.99.0 还对标准库进行了多项扩展。例如,为 Box<[T; N]> 实现了 IntoIterator,使得固定长度数组可以直接用于迭代操作。此外,VecDeque::retain_back、core::ffi::VaList 等 API 也得到了完善。

值得注意的是,Box::leak 的文档更新建议开发者避免先泄漏内存再释放的用法,因为这可能与未来的编译器优化发生冲突。官方推荐使用 Box::into_non_null 或 Box::into_raw 来替代这种模式。

文章配图

生态系统的积极信号

Rust 的发展不仅仅局限于语言本身,其生态系统也在不断壮大。近期,英伟达宣布加入 Rust 基金会成为白金会员,这是继 Google 在 Android 中引入 Rust 代码之后的又一重要信号。这些动作表明,Rust 正在获得越来越多主流技术公司的认可。

与此同时,微软发布了其开源沙箱库操作系统 LiteBox 的首个版本 v0.1。LiteBox 是一个基于 Rust 开发的 Library OS,旨在提供更安全的运行环境。它通过缩减应用与宿主系统之间的接口来降低攻击面,特别适合机密计算场景。

行业视角:从 Rails 到 Rust

尽管 Rust 在企业级应用中表现突出,但其在开发者社区中的接受度仍在逐步提升。Rails 创始人 DHH 的转变就是一个典型案例。他曾公开批评 Rust 的语法风格,但在实际测试中发现 Rust 在性能上的巨大优势后,决定将其应用于自家产品 HEY 的后端开发。

DHH 的这一转变反映了现代软件开发中对性能和安全性的日益重视。随着 AI 助力开发工具的普及,开发者们可以更加专注于业务逻辑,而将底层实现交给像 Rust 这样的高性能语言。

总的来说,Rust 1.99.0 的发布标志着该语言在性能优化和生态系统建设方面的双重进步。无论是对于希望提升系统性能的开发者,还是寻求更安全运行环境的企业,Rust 都展现出了强大的吸引力。