Rust 团队于今天发布了 Rust 1.64.0 新版本,1.64.0 稳定版中的主要更新内容如下:
用 IntoFuture
增强 .await
Rust 1.64 稳定了 IntoFuture
特性。IntoFuture
是一个类似于 IntoIterator
的特性,但 IntoFuture
不支持 for ... in ...
循环,而是改变了 .await
的工作方式。它可以等待任何可以通过 IntoFuture
转换为 Future
的东西,这可以帮助你的 API 变得更友好.
core
和 alloc
中与 C 语言兼容的 FFI 类型
当调用或被 C ABI 调用时,Rust 代码可以使用 c_uint
或 c_ulong
等类型别名以在任何目标上匹配来自 C 的相应类型,而不需要特定于目标的代码或条件。
以前,这些类型别名只在 std
中可用,所以为嵌入式目标和其他只能使用 core
或 alloc
的情况下编写的代码不能使用这些类型。
Rust 1.64 现在在 core::fi
中提供了所有的 c_*
类型别名,以及用于处理 C 字符串的 core::f i::CStr
。Rust 1.64 还提供了 alloc::ffi::CString
,用于处理只使用 alloc
crate 的 C 字符串。
rust-analyzer 现在可以通过 rustup 获得
rust-analyzer 现在作为 Rust 工具集的一部分被包含在其中。这使得下载和访问 rust-analyzer 更加容易,并使其在更多平台上可用。如今它可以作为一个 rustup 组件使用,可以通过以下方式安装。
rustup component add rust-analyzer
此时,要运行已安装的 rustup 版本,你需要这样调用它:
rustup run stable rust-analyzer
rustup 的下一个版本将提供一个内置的代理,这样运行可执行的 rust-analyzer 就会启动相应的版本。
Cargo 改进
当在一个 Cargo 工作空间中处理相关库或二进制 crate 的集合时,你现在可以避免 crate 之间共同的字段值的重复,如共同的版本号、仓库 URL 或 rust-version
。这也有助于在更新 crate 时保持这些值的同步。
在为多个目标进行构建时,你现在可以向 cargo build
传递多个 --target
选项,以便一次性构建所有这些目标。
稳定的 API
以下方法和特性的实现现在已经稳定了:
[future::IntoFuture]()
[num::NonZero*::checked_mul]()
[num::NonZero*::checked_pow]()
[num::NonZero*::saturating_mul]()
[num::NonZero*::saturating_pow]()
[num::NonZeroI*::abs]()
[num::NonZeroI*::checked_abs]()
[num::NonZeroI*::overflowing_abs]()
[num::NonZeroI*::saturating_abs]()
[num::NonZeroI*::unsigned_abs]()
[num::NonZeroI*::wrapping_abs]()
[num::NonZeroU*::checked_add]()
[num::NonZeroU*::checked_next_power_of_two]()
[num::NonZeroU*::saturating_add]()
[os::unix::process::CommandExt::process_group]()
[os::windows::fs::FileTypeExt::is_symlink_dir]()
[os::windows::fs::FileTypeExt::is_symlink_file]()
这些类型以前在 std::fi
中是稳定的,但现在在 core
和 alloc
中也可用:
[core::ffi::CStr]()
[core::ffi::FromBytesWithNulError]()
[alloc::ffi::CString]()
[alloc::ffi::FromVecWithNulError]()
[alloc::ffi::IntoStringError]()
[alloc::ffi::NulError]()
这些类型以前在 std::os::raw
中是稳定的,但现在在 core::ffi
和 std::ffi
中也可用
[ffi::c_char]()
[ffi::c_double]()
[ffi::c_float]()
[ffi::c_int]()
[ffi::c_long]()
[ffi::c_longlong]()
[ffi::c_schar]()
[ffi::c_short]()
[ffi::c_uchar]()
[ffi::c_uint]()
[ffi::c_ulong]()
[ffi::c_ulonglong]()
[ffi::c_ushort]()
更多详情可查看:https://github.com/rust-lang/rust/releases/tag/1.64.0