网站首页 > 博客文章 正文
2024年9月5日 · Rust 发布团队
Rust 团队很高兴宣布 Rust 的新版本 1.81.0。Rust 是一种赋能每个人构建可靠高效软件的编程语言。
如果您通过 rustup 安装了之前版本的 Rust,可以通过以下命令获取 1.81.0:
$ rustup update stable
如果您还没有安装 rustup,可以从我们网站的相应页面获取,并查看 1.81.0 的详细发布说明。
如果您想帮助我们测试未来的版本,可以考虑在本地更新使用 beta 通道(rustup default beta)或 nightly 通道(rustup default nightly)。如果遇到任何 bug,请向我们报告!
Rust 1.81.0 稳定版中的新特性
core::error::Error
1.81 稳定了 core 中的 Error trait,允许在 #![no_std] 库中使用该 trait。这主要使得更广泛的 Rust 生态系统能够标准化使用相同的 Error trait,无论库针对的是什么环境。
新的排序实现
标准库中的稳定和不稳定排序实现都已更新为新算法,提高了运行时性能和编译时间。
此外,这两种新的排序算法都试图检测不正确的 Ord 实现,这些实现会阻止它们产生有意义的排序结果,现在会在这种情况下发生 panic,而不是返回实际上随机排列的数据。遇到这些 panic 的用户应该审核他们的排序实现,以确保它们满足 PartialOrd 和 Ord 中记录的要求。
#[expect(lint)]
1.81 稳定了一个新的 lint 级别 expect,它允许明确注明应该出现特定的 lint,如果没有出现则发出警告。这个功能的预期用途是暂时静默某个 lint,无论是由于 lint 实现的 bug 还是正在进行的重构,同时希望知道何时不再需要该 lint。
例如,如果您正在移动代码库以遵守通过 Clippy lint(如
undocumented_unsafe_blocks)强制执行的新限制,您可以在过渡期间使用 #[expect(
clippy::undocumented_unsafe_blocks)],确保一旦所有 unsafe 块都有文档,您就可以选择拒绝该 lint 来强制执行它。
Clippy 还有两个 lint 来强制使用这个功能并帮助迁移现有的属性:
- clippy::allow_attributes 限制 allow 属性,支持使用 #[expect] 或将 #[allow] 属性迁移到 #[expect]
- clippy::allow_attributes_without_reason 要求 #[allow] 属性提供理由
Lint 原因
更改 lint 级别通常是出于某种特定原因。例如,如果代码在没有浮点支持的环境中运行,您可以使用 Clippy 对此类用法进行 lint,如 #![deny(clippy::float_arithmetic)]。但是,如果项目的新开发人员看到这个 lint 触发,他们需要查找(希望有)一个解释为什么添加它的注释。从 Rust 1.81 开始,他们可以直接在编译器消息中得到通知:
稳定的 API
- core::error
- hint::assert_unchecked
- fs::exists
- AtomicBool::fetch_not
- Duration::abs_diff
- IoSlice::advance
- IoSlice::advance_slices
- IoSliceMut::advance
- IoSliceMut::advance_slices
- PanicHookInfo
- PanicInfo::message
- PanicMessage
这些 API 现在在 const 上下文中稳定:
- char::from_u32_unchecked(函数)
- char::from_u32_unchecked(方法)
- CStr::count_bytes
- CStr::from_ptr
兼容性说明
分离 panic hook 和 panic handler 参数
我们已将 std::panic::PanicInfo 重命名为 std::panic::PanicHookInfo。旧名称将继续作为别名工作,但从 Rust 1.82.0 开始将导致弃用警告。
core::panic::PanicInfo 将保持不变,因为这现在是一个不同的类型。
在 extern "C" 函数中未捕获的 panic 将中止
这完成了 1.71 中开始的过渡,该版本添加了专用的 -unwind ABI 变体(以及其他变体),用于预期跨 ABI 边界展开的情况。从 1.81 开始,非展开 ABI(例如 "C")现在将在未捕获的展开时中止,解决了长期存在的健全性问题。
依赖展开的程序应该过渡到使用 -unwind 后缀的 ABI 变体。
WASI 0.1 目标命名更改
使用 wasm32-wasi 目标(针对 WASI 0.1)现在将发出编译器警告,并要求用户切换到 wasm32-wasip1 目标。这两个目标是相同的,wasm32-wasi 只是被重命名,这个对 WASI 目标的更改是为了能够在 2025 年 1 月移除 wasm32-wasi。
修复 CVE-2024-43402
std::process::Command 现在在 Windows 上调用批处理文件时,能正确转义参数,特别是在存在尾随空白或句点(被 Windows 忽略和去除)的情况下。
有关此更改的更多详细信息,请参阅之前的公告。
其他变更
查看 Rust、Cargo 和 Clippy 中的所有变更。
1.81.0 的贡献者
许多人共同创造了 Rust 1.81.0。没有你们所有人,我们无法做到这一点。感谢大家!
猜你喜欢
- 2025-03-14 重磅!RustRover 2024.3 解锁编程“新姿势”
- 2025-03-14 Rust 资讯:Rust 1.75.0 正式版发布,支持在`trait`中使用`async fn`
- 2025-03-14 Rust之快速搭建开发环境(rust 游戏开发)
你 发表评论:
欢迎- 375℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 369℃用AI Agent治理微服务的复杂性问题|QCon
- 362℃初次使用IntelliJ IDEA新建Maven项目
- 355℃Maven技术方案最全手册(mavena)
- 352℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 349℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 349℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 345℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)