Rust 1.80 新特性总结
Rust 1.80 引入了多项新特性和改进,主要包括 LazyCell 和 LazyLock 的稳定化、独占范围支持、新的 lint 警告、以及兼容 C23 的变参函数等。
1. LazyCell 和 LazyLock 的稳定化
LazyCell和LazyLock用于延迟初始化数据,直到首次访问时才进行初始化。LazyLock是线程安全的版本。- 与
OnceCell和OnceLock不同,LazyCell和LazyLock提供了更符合人体工程学的延迟初始化方式。
OnceCell和OnceLock在 Rust 1.70 中已稳定化,确保数据只初始化一次,但在延迟初始化时使用较为繁琐。
示例代码:
使用
LazyLock进行延迟初始化:use std::sync::LazyLock; static G_INT: LazyLock<u8> = LazyLock::new(|| 100); fn main() { let x = *G_INT; // 初始化在此处发生 // ... }使用
OnceLock进行延迟初始化:use std::sync::OnceLock; static G_INT: OnceLock<u8> = OnceLock::new(); fn main() { let x = *G_INT.get_or_init(|| 100); // ... }
2. 独占范围支持
- Rust 1.80 引入了独占范围的支持,允许在模式匹配中使用
a..b和..b的语法。 - 之前 Rust 仅支持包含端点的范围(如
a..=b或..=b)。
示例代码:
const K: u32 = 10u32.pow(3);
const M: u32 = 10u32.pow(6);
const G: u32 = 10u32.pow(9);
match n {
..K => "",
K..M => "k",
M..G => "M",
G.. => "G",
}3. 新的 Lint 警告
为了防止在现有代码中引入独占模式时的错误,Rust 1.80 引入了两个新的 lint 警告:
non_contiguous_range_endpoints:检测范围端点不连续的情况。overlapping_range_endpoints:检测范围端点重叠的情况。
4. 变参函数的支持
- Rust 1.80 支持不带命名参数的变参函数,这使得 Rust 更接近 C23 的语法。
- 这一更改主要是移除了静态检查,允许这样的函数存在。
5. 其他改进
- Rust 1.80 还在语言、编译器和标准库中引入了许多其他改进和稳定化的 API。
6. 详细发布说明
- 更多新特性和稳定化的详细信息,请参考官方 发布说明。
总结
Rust 1.80 通过引入 LazyCell 和 LazyLock 提供了更便捷的延迟初始化方式,增加了独占范围支持,并引入了新的 lint 警告以防止常见错误。此外,变参函数的支持使得 Rust 更接近 C23 标准。这些改进进一步提升了 Rust 的灵活性和易用性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。