Rust 1.83.0 发布

来源: OSCHINA
2024-11-29 10:24:00
AI总结

Rust 1.83.0 稳定版已正式发布,主要带来以下变化:

新的 const 功能

此版本对在 const contexts 中运行的代码的功能进行了多项重大扩展。指的是编译器在编译时必须评估的所有代码:conststatic项的初始值、数组长度、枚举判别值、const 泛型参数以及可从此类上下文调用的函数(const fn)。

statics 的引用。 到目前为止,除了static项的初始化表达式之外,const contexts 都禁止引用static项。此限制现已取消:

static S: i32 = 25;
const C: &i32 = &S;

值得注意的是,在 const contexts 中仍然不允许读取可变或内部可变静态的值。此外,常量的最终值不得引用任何可变或内部可变静态:

static mut S: i32 = 0;

const C1: i32 = unsafe { S };
// error: constant accesses mutable global memory

const C2: &i32 = unsafe { &S };
// error: encountered reference to mutable memory in `const`

这些限制确保 constants 仍然是“constant”:它们的求值及以及它们作为模式的含义(可能涉及取消引用引用)在整个程序执行过程中将是相同的。

尽管如此,还是允许常量求值到指向可变静态或内部可变静态的原始指针:

static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;

可变引用和指针。 现在可以在 const contexts 中使用可变引用:

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;
// error[E0764]: mutable references are not allowed in the final value of constants

此版本还附带了一整套新功能,这些函数现在在 const contexts 中很稳定。

详情可查看官方公告:https://blog.rust-lang.org/2024/11/28/Rust-1.83.0.html

展开阅读全文
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
分享
AI总结
返回顶部
顶部