Rust 团队很高兴宣布 Rust 的新版本 1.83.0 正式发布!Rust 是一门编程语言,旨在让每个人都能够构建可靠且高效的软件。
快速更新至 1.83.0
如果您已经通过 rustup
安装了 Rust 的旧版本,可以通过以下命令更新到 1.83.0:
$ rustup update stable
如果尚未安装 rustup
,可以访问 Rust 官网获取并安装,
同时查看 1.83.0 版本的详细发布说明。
如果您想提前测试未来的版本,可以考虑切换到 beta 或 nightly 渠道进行测试:
$ rustup default beta
$ rustup default nightly
如果遇到任何问题,请及时向我们报告!
1.83.0 的新功能
新的 const
特性
此版本扩展了 const
上下文中的能力,包括编译时需要求值的代码(如 const
和 static
项的初始值、数组长度、枚举判别值、const
泛型参数以及在这些上下文中调用的函数)。
静态引用支持
以往,const
上下文中(除 static
项的初始化表达式外)无法引用静态项。此限制现已取消:
static S: i32 = 25;
const C: &i32 = &S;
但仍然禁止读取可变或内部可变静态项的值:
static mut S: i32 = 0;
const C1: i32 = unsafe { S }; // 错误:常量访问了可变全局内存
const C2: &i32 = unsafe { &S }; // 错误:在 `const` 中引用了可变内存
此外,const
常量的最终值中仍不能引用可变或内部可变静态项,但可以包含指向它们的原始指针:
static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;
可变引用与指针支持
const
上下文中现在可以使用可变引用:
const fn inc(x: &mut i32) {
*x += 1;
}
const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};
也支持可变原始指针和内部可变性:
use std::cell::UnsafeCell;
const C: i32 = {
let c = UnsafeCell::new(41);
unsafe { *c.get() += 1 };
c.into_inner()
};
但可变引用和指针不能作为常量的最终值:
const C: &mut i32 = &mut 4;
// 错误:常量的最终值中不允许可变引用
这些增强解锁了更多代码可在 const
上下文中执行,期待社区的创造性用法!
稳定的 API
新增功能
以下新功能已稳定:
BufRead::skip_until
ControlFlow
系列方法:break_value
,continue_value
等Debug
系列方法:finish_non_exhaustive
等- 更多新增
ErrorKind
类型:HostUnreachable
,ReadOnlyFilesystem
等 Option::get_or_insert_default
Waker
系列方法:data
,new
,vtable
char::MIN
hash_map::Entry::insert_entry
支持 const
上下文的新功能
以下 API 现可在 const
上下文中使用:
Cell::into_inner
Duration
系列方法:as_secs_f32
,as_secs_f64
等MaybeUninit
,NonNull
系列方法:write
,slice_from_raw_parts
等Option
系列方法:unwrap
,flatten
等UnsafeCell
,ptr
和slice
系列方法:write
,from_mut
等
完整列表请参考 官方发布说明。
其他改进
Rust 1.83.0 同时包含 Cargo 和 Clippy 的多项改进,详情请查看完整变更记录。