返回首页

Rust 1.95.0:cfg_select!、if-let 守卫和稳定 API | 概述

Rust 1.95.0 发布的概述:针对开发者的新功能。cfg_select! 宏取代 cfg-if,支持 match 表达式中的 if-let 守卫,关键 API 的稳定化。实用示例和迁移推荐。

Rust 1.95.0:新功能如何简化开发
Advertisement 728x90

Rust 1.95.0:新特性如何简化 Rust 开发

Rust 1.95.0 稳定版已发布,扩展了语言在创建安全高效代码方面的能力。主要变更聚焦于简化条件编译、改进模式匹配语法,并稳定关键 API。这些更新通过减少认知负担和最小化样板代码,直接影响开发者的日常工作。

cfg_select! 宏:内置的 cfg-if 替代方案

cfg_select! 宏解决了之前需要外部 crate cfg-if 的平台相关实现问题。现在,构建时条件编译已集成到标准库中。该宏类似于 cfg 指令的 match,选择第一个谓词为真的分支。这对于实现跨平台库特别有用,不同代码适用于 Unix、Windows 或不同架构。

示例用法:

Google AdInline article slot
cfg_select! {
    unix => {
        fn platform_specific() { /* Sale for Unix */ }
    }
    target_pointer_width = "32" => {
        fn platform_specific() { /* 32-bitnaya realizatsiya */ }
    }
    _ => {
        fn platform_specific() { /* Defolt */ }
    }
}

主要优势:无需依赖外部 crate,并与其它 Rust 宏统一语法。注意:宏在编译时展开为单个分支,因此未使用代码部分完全从二进制文件中排除。

match 表达式中的 if-let 守卫:扩展模式匹配能力

Rust 1.95.0 稳定了 match 表达式中的 if-let 守卫,允许在单个分支中结合模式匹配和条件检查。此功能之前仅在 nightly 版本可用,现在进入稳定通道。语法保持简洁易读,避免嵌套 match 表达式。

示例:

Google AdInline article slot
match data {
    Some(x) if let Ok(y) = process(x) => {
        // Dostupny x and y
        handle(x, y);
    }
    _ => fallback(),
}

重要限制:编译器在穷尽性检查时不考虑 if-let 守卫中的模式。这意味着带有 if-let 守卫的分支不保证处理所有可能情况,不同于常规 match。开发者应明确验证场景覆盖。

稳定化的 API:关键变更

本次发布稳定了超过 30 个 API,影响低级操作和内存处理。主要变更组:

  • 未初始化内存管理FromAsRefAsMut 方法适用于 MaybeUninit<[T; N]>,简化原始缓冲区操作。
  • 原子操作:为 AtomicPtrAtomicBoolAtomicIntAtomicUint 添加 updatetry_update
  • 集合操作:为 VecVecDequeLinkedList 新增 push_mutinsert_mut 方法。
  • 低级工具Layout::dangling_ptrLayout::repeatcold_path

特别值得关注的是 bool: TryFrom<{integer}> 的稳定化,允许通过 TryFrom 安全地将整数类型转换为布尔值。这消除了手动检查如 value != 0 的需求。

Google AdInline article slot

自定义目标弃用:发生了什么

Rust 1.95.0 在稳定通道中移除对自定义 JSON 目标规范的支持。此功能之前通过 --target 标志可用,即使是基本标准库构建也需要 nightly 工具。现在,使用完全稳定工具链的用户不会遇到意外错误,但将失去自定义目标的能力。

Rust 团队正在跟踪 issue 中收集用例,以确定未来如何稳定此功能。目前,切换到官方目标或使用 nightly 通道进行实验。

关键要点

  • cfg_select! 宏在标准库中替换 cfg-if,消除外部依赖。
  • match 表达式中的 if-let 守卫简化复杂检查,但不影响穷尽性检查。
  • 原子操作和内存方法的稳定化对系统编程至关重要。
  • 稳定通道中移除自定义目标,需要审查自定义构建。

建议所有需要现代 API 支持和简化条件编译的项目更新到 Rust 1.95.0。为测试未来发布,使用 beta 通道(rustup default beta)。

— Editorial Team

Advertisement 728x90

继续阅读