Rust 1.65.0 稳定版发布


Rust 1.65.0 稳定版已发布。此版本包含多项重要的语法变更,以及编辑器和标准库方面的改动。值得关注的是,Rust 1.65 现在还启用了 MIR 内联来优化编译,为 crate 提供了 3-10% 的编译时间改进。

语言特性

  • 为枚举类型使用#[non_exhaustive]变体进行as转换添加错误处理
  • let else正式稳定
let PATTERN: TYPE = EXPRESSION else {
DIVERGING_CODE;
};
  • 泛型关联类型 (Generic Associated Types, GATs) 正式稳定

Lifetime、type 和 const 泛型现在可以在关联类型上进行定义,如下所示:

trait Foo {
type Bar<'x>;
}

下面是一些使用示例:

/// An `Iterator`-like trait that can borrow from `Self`
trait LendingIterator {
type Item<'a> where Self: 'a;

fn next<'a>(&'a mut self) -> Option<Self::Item<'a>>;
}

/// Can be implemented over smart pointers, like `Rc` or `Arc`,
/// in order to allow being generic over the pointer type
trait PointerFamily {
type Pointer<T>: Deref<Target = T>;

fn new<T>(value: T) -> Self::Pointer<T>;
}

/// Allows borrowing an array of items. Useful for
/// `NdArray`-like types that don't necessarily store
/// data contiguously.
trait BorrowArray<T> {
type Array<'x, const N: usize> where Self: 'x;

fn borrow_array<'a, const N: usize>(&'a self) -> Self::Array<'a, N>;
}
  • 从 Clippy 添加 lintslet_underscore_drop,let_underscore_locklet_underscore_must_use
  • 未初始化的整数、浮点数和原始指针现在会被视作未定义行为 (immediate UB)
  • 适用于 Windows x86_64, aarch64 和 thumbv7a 架构的 raw-dylib 正式稳定
  • 不允许在外部 ADTs 中Dropimpl

编译器

  • Linux 上的-Csplit-debuginfo正式稳定
  • 当存在多个变体拥有数据时,使用 niche-filling 进行优化
  • 关联类型 projections 现在在解析基础类型之前会被验证为格式正确
  • 调整大小时会对结构字段类型进行规范化
  • 将 LLVM 版本升级到 15
  • 修复 aarch64 call abi 以确保 zeroext 正确运行
  • debuginfo: 为枚举泛化类似 C++ 的编码
  • 添加special_module_namelint
  • 使用-C instrument-coverage时,增加对默认生成唯一的 profraw 文件的支持
  • 支持面向 iOS/tvOS targets 进行动态链接

标准库

  • 不再在派生 (PartialEq) 中生成PartialEq::ne
  • Windows RNG:默认使用BCRYPT_RNG_ALG_HANDLE
  • 禁止将System与 direct system allocator 调用混合使用
  • Document 不再支持写入非阻塞 stdio/stderr

详情查看 Release Note 和发布公告。


相關推薦

2023-07-15

Rust 1.71.0 稳定版已发布。 重要变化 C-unwindABI 正式稳定(同时包括其他-unwind后缀的 ABI 变体1):该特性对于跨 ABI 边界时,异常处理的行为更安全 调试器增加可视化属性#[debug_visualizer(natvis_file = "...")]和#[debug_visualizer(gdb_scrip

2023-04-22

 Rust 1.69.0 稳定版已发布。 1.69.0 稳定版中有什么 Cargo 建议自动修复警告 Rust 1.29.0 添加了 cargo fix 子命令来自动修复一些简单的编译器警告。从那时起,可以自动修复的警告数量继续稳步增加。此外,还增加了对自动修复一

2022-07-02

Rust 1.62.0 稳定版现已发布,具体更新内容如下: cargo add 现在可以使用cargo add直接从命令行添加新的依赖项。该命令支持指定功能和版本。它也可以用来修改现有的依赖项。 例如: cargo add log cargo add serde --features derive cargo add

2022-02-28

Rust 1.59.0 稳定版已正式发布,新版本最值得关注的特性是支持在代码中内联汇编 (Inline assembly),其他变化包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。 内联汇编 (Inline assembly) 此项特

2024-10-09

Tauri 2.0 稳定版已正式发布。 Tauri 是一个桌面 UI 框架,可让开发者使用每个平台的 Webview 技术栈为所有主要桌面操作系统构建应用程序,目前支持 Windows/macOS/Linux 等平台。开发者通过 Tauri 几乎可以使用任何编译为 HTML、JS 和 CSS

2022-05-20

4 功能一起使用 X86 #[target_feature = "adx"] 现已到达稳定状态 Libraries ManuallyDrop<T>现在被记录为具有相同的布局T #[ignore = "…"] 运行测试时会打印信息 Consistently始终将 Windows 上缺少的 stdio 句柄显示为 NULL 句

2023-08-31

PF 到底是可观测领域的神器 or 鸡肋? sudo-rs 发布了首个稳定版:0.2.0。获取: sudo tar -C /usr/local -xvf sudo-0.2.0.tar.gz 下载地址:https://github.com/memorysafety/sudo-rs/releases/tag/v0.2.0 sudo-rs 是互联网安全研究小组 (ISRG) 发起的 Prossim

2023-02-10

历经三年多的开发,Meilisearch 1.0 首个完全稳定版已正式发布,可用于生产环境且向前兼容。 Meilisearch 是 Rust 实现的高性能开源搜索引擎,支持方便地集成到任何网站或应用程序,支持自托管 (self-hosting),可作为 Algolia 和 Elasti

2024-08-18

并于 2025 年 1 月 3 日发布测试版 Rust v1.85,2 月 20 日发布稳定版 Rust v1.85。 使 Async Rust 体验更接近 sync Rust。计划提供几个异步构建块功能,其中最值得注意的是对 async closures 和Send bounds 的支持。这是将 async Rust

2023-06-03

于从 crates.io 读取索引。这个功能之前已经在 Rust 1.68.0 中稳定下来,但仍然需要配置才能在 crates.io 中使用。原计划就是在 1.70.0 中默认启用该功能的,现在如期实现。 当你从 crates.io 的索引中获取信息时,你应该看到性能的大

2022-09-23

Rust 团队于今天发布了 Rust 1.64.0 新版本,1.64.0 稳定版中的主要更新内容如下: 用 IntoFuture 增强 .await Rust 1.64 稳定了 IntoFuture 特性。IntoFuture 是一个类似于 IntoIterator 的特性,但 IntoFuture 不支持 for ... in ... 循环,而是改变了 .awai

2024-01-07

情很有可能会发生。   二、Linux 6.12 将是下一个长期稳定版内核,预计 2024 年 12 月 1 日发布(除非 Linus 拒绝在美国感恩节假期后立即发布,这种情况下将在一周后推出)。   三、首批用户可见的 Rust 代码最早可能在 Li

2024-07-27

Rust 1.80.0 稳定版现已发布,主要带来以下变化: LazyCell和LazyLock 新的“lazy”类型将值的初始化延迟到首次访问,它们类似于1.70 中稳定的OnceCell和OnceLock类型,但单元格中包含了初始化函数。这完成了从流行的和板条箱中采用到

2022-12-19

Rust 团队于近日发布了 Rust 1.66.0 新版本,1.66.0 稳定版中的主要更新内容如下: 对有字段的枚举进行显式判别 有整数表示的枚举现在可以使用显式判别,即使它们有字段。 #[repr(u8)] enum Foo { A(u8), B(i8), C(bool) = 42, } 以前,你