Rust团队于11日发布了新版本,1.63.0稳定版中的主要更新内容如下:

Scopedthreads

从1.0开始,Rust代码可以用std::thread::spawn来启动新的线程,但这个函数用"static"来限定其闭包。这意味着线程目前必须拥有传递到其闭包中的任何参数的所有权;你不能把借来的数据传递给线程。

现在,随着1.63.0的推出,标准库中增加了scopedthreads,支持线程使用局部变量,而不仅仅是静态变量。

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
array::from_fnBox::into_pinBinaryHeap::try_reserveBinaryHeap::try_reserve_exactOsString::try_reserveOsString::try_reserve_exactPathBuf::try_reservePathBuf::try_reserve_exactPath::try_existsRef::filter_mapRefMut::filter_mapNonNull::[T]::lenToOwned::clone_intoIpv6Addr::to_ipv4_mappedunix::io::AsFdunix::io::BorrowedFd'fdunix::io::OwnedFdwindows::io::AsHandlewindows::io::BorrowedHandle'handlewindows::io::OwnedHandlewindows::io::HandleOrInvalidwindows::io::HandleOrNullwindows::io::InvalidHandleErrorwindows::io::NullHandleErrorwindows::io::AsSocketwindows::io::BorrowedSocket'handlewindows::io::OwnedSocketthread::scopethread::Scopethread::ScopedJoinHandle

原文: