Skip to main content

One post tagged with "稳定 API"

View All Tags

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 上下文中的能力,包括编译时需要求值的代码(如 conststatic 项的初始值、数组长度、枚举判别值、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, ptrslice 系列方法:write, from_mut

完整列表请参考 官方发布说明

其他改进

Rust 1.83.0 同时包含 Cargo 和 Clippy 的多项改进,详情请查看完整变更记录。

链接

鱼雪