Rust 1.55.0 正式发布

Rust 团队正式推出新版本的 Rust 1.55.0,如果你此前已通过 rustup 安装了以前的 Rust 版本,运行以下命令即可升级至最新版本:

rustup update stable

1.55.0 稳定版中的更新内容包括:

Cargo 重复编译器错误

在过去的版本中,当运行 cargo testcargo check --all-targets 或类似的命令在多个配置中构建相同的 Rust crate 时,错误和警告可能会重复出现,因为 rustc 的运行是并行的,而且都显示相同的警告。

例如,在 1.54.0 中,类似这样的输出很常见:

$ cargo +1.54.0 check --all-targets
    Checking foo v0.1.0
warning: function is never used: `foo`
 --> src/lib.rs:9:4
  |
9 | fn foo() {}
  |    ^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: 1 warning emitted

warning: function is never used: `foo`
 --> src/lib.rs:9:4
  |
9 | fn foo() {}
  |    ^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: 1 warning emitted

    Finished dev [unoptimized + debuginfo] target(s) in 0.10s

在 1.55 版本中,这一行为已被调整为在编译结束后进行重复并打印报告:

$ cargo +1.55.0 check --all-targets
    Checking foo v0.1.0
warning: function is never used: `foo`
 --> src/lib.rs:9:4
  |
9 | fn foo() {}
  |    ^^^
  |
  = note: `#[warn(dead_code)]` on by default

warning: `foo` (lib) generated 1 warning
warning: `foo` (lib test) generated 1 warning (1 duplicate)
    Finished dev [unoptimized + debuginfo] target(s) in 0.84s

更快、更准确的浮点数解析

标准库的浮点解析实现已经更新为使用 Eisel-Lemire 算法,这带来了速度的提高和正确性的改善。在过去,某些边缘情况无法解析,现在这已经被修复了。

std::io::ErrorKind 变体已更新

std::io::ErrorKind 是一个 #[non_exhaustive] 枚举,它将错误分为可移植的类别,如 NotFoundWouldBlock。拥有 std::io::Error 的 Rust 代码可以调用 kind 方法来获得 std::io::ErrorKind,并在此基础上进行匹配以处理特定错误。

并非所有的错误都被归类为 ErrorKind 值;有些错误没有被归类,而是被放置在一个万能的变体中。在以前的 Rust 版本中,未分类的错误使用 ErrorKind::Other;然而,用户创建的 std::io::Error 值也通常使用 ErrorKind::Other。在 1.55 中,未分类的错误现在使用内部变体 ErrorKind::Uncategorized;这使得 ErrorKind::Other 专门用于构造不来自标准库的 std::io::Error 值。

增加了开放范围(open range)模式

Rust 1.55 稳定了模式中开放范围的使用:

match x as u32 {
      0 => println!("zero!"),
      1.. => println!("positive number!"),
}

稳定的 API

以下方法和特性的实现被稳定化:

  • [Bound::cloned](

    )
  • [Drain::as_str](

    )
  • [IntoInnerError::into_error](

    )
  • [IntoInnerError::into_parts](

    )
  • [MaybeUninit::assume_init_mut](

    )
  • [MaybeUninit::assume_init_ref](

    )
  • [MaybeUninit::write](

    )
  • [array::map](

    )
  • [ops::ControlFlow](

    )
  • [x86::_bittest](

    )
  • [x86::_bittestandcomplement](

    )
  • [x86::_bittestandreset](

    )
  • [x86::_bittestandset](

    )
  • [x86_64::_bittest64](

    )
  • [x86_64::_bittestandcomplement64](

    )
  • [x86_64::_bittestandreset64](

    )
  • [x86_64::_bittestandset64](

    )

以前稳定的函数现在是 const

  • [str::from_utf8_unchecked](

    )

Rust 1.55.0 版本中的其他变化可查看:https://blog.rust-lang.org/2021/09/09/Rust-1.55.0.html

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/150035.html

(0)
上一篇 2021年9月12日
下一篇 2021年9月12日

相关推荐

发表回复

登录后才能评论