Rust 团队于今天发布了 Rust 1.63.0 新版本,1.63.0 稳定版中的主要更新内容如下:
从 1.0 开始,Rust 代码可以用 std::thread::spawn 来启动新的线程,但这个函数用 "static" 来限定其闭包。这意味着线程目前必须拥有传递到其闭包中的任何参数的所有权;你不能把借来的数据传递给线程。
std::thread::spawn
现在,随着 1.63.0 的推出,标准库中增加了 scoped threads,支持线程使用局部变量,而不仅仅是静态变量。
以前,Rust 代码在使用平台 API 时,如果使用原始文件描述符或句柄,通常会直接使用描述符的特定平台表示。对于 Rust 与这种 API 的绑定,类型系统无法编码 API 是否会取得文件描述符的所有权或只是借用它。
现在,Rust 提供了诸如 BorrowedFd 和 OwnedFd 这样的包装器类型,它们被标记为 #[repr(transparent)],这意味着 extern "C" 绑定可以直接使用这些类型来编码所有权语义。
BorrowedFd
OwnedFd
#[repr(transparent)]
extern "C"
Condvar::new、 Mutex::new 和 RwLock::new 函数现在可以在 const 上下文中调用,这可以避免使用像 lazy_static 这样的 crates 来创建 Mutex、 RwLock 或 Condvar 值的全局静态。
Condvar::new
Mutex::new
RwLock::new
const
lazy_static
Mutex
RwLock
Condvar
已经从所有版本的 rustc 中完全删除了之前的词法借用检查器,完全启用了非词法的、新版本的借用检查器。对于大多数用户来说,这一变化将为一些借用检查错误带来更好的诊断。
array::from_fn Box::into_pin BinaryHeap::try_reserve BinaryHeap::try_reserve_exact OsString::try_reserve OsString::try_reserve_exact PathBuf::try_reserve PathBuf::try_reserve_exact Path::try_exists Ref::filter_map RefMut::filter_map NonNull::<[T]>::len ToOwned::clone_into Ipv6Addr::to_ipv4_mapped unix::io::AsFd unix::io::BorrowedFd<'fd> unix::io::OwnedFd windows::io::AsHandle windows::io::BorrowedHandle<'handle> windows::io::OwnedHandle windows::io::HandleOrInvalid windows::io::HandleOrNull windows::io::InvalidHandleError windows::io::NullHandleError windows::io::AsSocket windows::io::BorrowedSocket<'handle> windows::io::OwnedSocket thread::scope thread::Scope thread::ScopedJoinHandle
更多详情可查看:https://blog.rust-lang.org/2022/08/11/Rust-1.63.0.html
评论删除后,数据将无法恢复
Rust 1.63.0 发布
Rust 团队于今天发布了 Rust 1.63.0 新版本,1.63.0 稳定版中的主要更新内容如下:
Scoped threads
从 1.0 开始,Rust 代码可以用
std::thread::spawn
来启动新的线程,但这个函数用 "static" 来限定其闭包。这意味着线程目前必须拥有传递到其闭包中的任何参数的所有权;你不能把借来的数据传递给线程。现在,随着 1.63.0 的推出,标准库中增加了 scoped threads,支持线程使用局部变量,而不仅仅是静态变量。
Rust 对原始文件描述符/句柄的所有权
以前,Rust 代码在使用平台 API 时,如果使用原始文件描述符或句柄,通常会直接使用描述符的特定平台表示。对于 Rust 与这种 API 的绑定,类型系统无法编码 API 是否会取得文件描述符的所有权或只是借用它。
现在,Rust 提供了诸如
BorrowedFd
和OwnedFd
这样的包装器类型,它们被标记为#[repr(transparent)]
,这意味着extern "C"
绑定可以直接使用这些类型来编码所有权语义。Mutex、RwLock、Condvar 初始化
Condvar::new
、Mutex::new
和RwLock::new
函数现在可以在const
上下文中调用,这可以避免使用像lazy_static
这样的 crates 来创建Mutex
、RwLock
或Condvar
值的全局静态。非词法生命周期迁移完成
已经从所有版本的 rustc 中完全删除了之前的词法借用检查器,完全启用了非词法的、新版本的借用检查器。对于大多数用户来说,这一变化将为一些借用检查错误带来更好的诊断。
稳定的 API
更多详情可查看:https://blog.rust-lang.org/2022/08/11/Rust-1.63.0.html