Rust 1.73.0发布

Rust 团队很高兴地宣布 Rust 的新版本 1.73.0。Rust 是一种编程语言,它让每个人都能构建可靠、高效的软件。

Rust 1.73.0发布Rust 1.73.0发布

如果你已经通过 rustup 安装了之前的 Rust 版本,你可以通过以下方式获得 1.73.0:

rustup update stable
如果还没有,可以从我们网站的相应页面获取 rustup,并在 GitHub 上查看 1.73.0 的详细发布说明。

如果你想帮助我们测试未来的版本,可以考虑在本地更新,使用 beta 频道(rustup 默认 beta 频道)或 nightly 频道(rustup 默认 nightly 频道)。请报告您可能遇到的任何 bug!

1.73.0 稳定版中的内容

清理panic的信息

默认紧急处理程序的输出已更改为将紧急信息放在单独一行,而不是用引号封装。如本例所示,这将使panic信息更容易阅读:

fn main() {
    let file = "ferris.txt";
    panic!("oh no! {file:?} not found!");
}

从 Rust 1.73 开始输出:

thread 'main' panicked at 'oh no! "ferris.txt" not found!', src/main.rs:3:5

从 Rust 1.73 开始输出:

thread 'main' panicked at src/main.rs:3:5:
oh no! "ferris.txt" not found!

当信息较长、包含嵌套引号或跨多行时,这一点尤其有用。

此外,还修改了 assert_eq 和 assert_ne 产生的恐慌信息,移动了自定义信息(第三个参数)并删除了一些不必要的标点符号,如下所示:

fn main() {
    assert_eq!("", "", "ferris is not a fish");
}

Rust 1.73 之前的输出:

thread 'main' panicked at 'assertion failed: `(left == right)`
 left: `""`,
right: `""`: ferris is not a fish', src/main.rs:2:5

从 Rust 1.73 开始输出:

thread 'main' panicked at src/main.rs:2:5:
assertion `left == right` failed: ferris is not a fish
 left: ""
right: ""

线程本地初始化

正如 RFC 3184 所建议的,LocalKey> 和 LocalKey> 现在可以直接使用 get()、set()、take() 和 replace() 方法进行操作,而无需像一般 LocalKey 工作那样跳过 with(|inner| …)闭包。LocalKey 是 thread_local! 状态的类型。

新方法使普通代码更加简洁,并避免了为新线程在 thread_local! 中指定的默认值运行额外的初始化代码。

thread_local! {
    static THINGS: Cell> = Cell::new(Vec::new());
}

fn f() {
    // before:
    THINGS.with(|i| i.set(vec![1, 2, 3]));
    // now:
    THINGS.set(vec![1, 2, 3]);

    // ...

    // before:
    let v = THINGS.with(|i| i.take());
    // now:
    let v: Vec = THINGS.take();
}

稳定的 APIs

  1. Unsigned {integer}::div_ceil
  2. Unsigned {integer}::next_multiple_of
  3. Unsigned {integer}::checked_next_multiple_of
  4. std::ffi::FromBytesUntilNulError
  5. std::os::unix::fs::chown
  6. std::os::unix::fs::fchown
  7. std::os::unix::fs::lchown
  8. LocalKey::>::get
  9. LocalKey::>::set
  10. LocalKey::>::take
  11. LocalKey::>::replace
  12. LocalKey::>::with_borrow
  13. LocalKey::>::with_borrow_mut
  14. LocalKey::>::set
  15. LocalKey::>::take
  16. LocalKey::>::replace

现在,这些应用程序接口在各种情况下都很稳定:

  1. rc::Weak::new
  2. sync::Weak::new
  3. NonNull::as_ref
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值