原文链接

2024年2月8日 Rust发布团队

Rust团队很快乐地宣告Rust的新版别1.76.0。Rust是一种赋予每个人构建可靠和高效软件才能的编程言语。

如果您通过rustup装置了Rust的旧版别,您能够使用以下指令获取1.76.0版别:

$ rustup update stable

如果您还没有装置rustup,您能够从咱们网站的相应页面获取,并检查1.76.0的详细发布说明。

如果您愿意通过测验未来版别来帮助咱们,您能够考虑本地更新使用beta频道(rustup default beta)或夜间频道(rustup default nightly)。请报告您可能遇到的任何过错!

1.76.0安稳版中的内容 这次发布相对较小,但好像平常,即使是渐进的改善也会使全体更加完善。本文突出了一些改变,其他改变可能还会满意更多特定需求。

ABI兼容性更新 函数指针文档中新增的ABI兼容性部分描绘了函数签名成为ABI兼容的意义。其间很大一部分是参数类型和回来类型的兼容性,列出了Rust当时认为兼容的类型。大多数情况下,这份文档并没有增加任何新的保证,仅仅描绘了兼容性的现状。

仅有的新增加是现在保证char和u32是ABI兼容的。它们一向具有相同的巨细和对齐方式,但现在它们甚至在函数调用ABI中被认为是等价的,与上述文档一起。

引用的类型称号 出于调试意图,自Rust 1.38以来,any::type_name::()一向可用于回来类型T的字符串描绘,但这需求一个显式的类型参数。特别是对于像闭包这样的无法命名的类型或不透明的回来类型,指定这种类型并不总是简单的。新的any::type_name_of_val(&T)提供了一种从任何类型的引用获取描绘性称号的办法。

fn get_iter() -> impl Iterator<Item = i32> {
    [1, 2, 3].into_iter()
}
fn main() {
    let iter = get_iter();
    let iter_name = std::any::type_name_of_val(&iter);
    let sum: i32 = iter.sum();
    println!("The sum of the `{iter_name}` is {sum}.");
}

这将打印:

The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.

安稳化的APIs

  • Arc::unwrap_or_clone
  • Rc::unwrap_or_clone
  • Result::inspect
  • Result::inspect_err
  • Option::inspect
  • type_name_of_val
  • std::hash::{DefaultHasher, RandomState} 这些之前只能通过std::collections::hash_map取得。
  • ptr::{from_ref, from_mut}
  • ptr::addr_eq

其他改变 检查Rust、Cargo和Clippy中产生的所有改变。

对1.76.0的贡献者 许多人一起创造了Rust 1.76.0。没有你们所有人的帮助,咱们无法完结这一切。谢谢!