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 提供了诸如 BorrowedFdOwnedFd 这样的包装器类型,它们被标记为 #[repr(transparent)],这意味着 extern "C" 绑定可以直接使用这些类型来编码所有权语义。

Mutex、RwLock、Condvar 初始化

Condvar::newMutex::newRwLock::new 函数现在可以在 const 上下文中调用,这可以避免使用像 lazy_static 这样的 crates 来创建 MutexRwLockCondvar 值的全局静态。

非词法生命周期迁移完成

已经从所有版本的 rustc 中完全删除了之前的词法借用检查器,完全启用了非词法的、新版本的借用检查器。对于大多数用户来说,这一变化将为一些借贷检查错误带来更好的诊断。

稳定的 API

  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

展开阅读全文
发表评论

相关文章