![]()
Rust 语言团队于 2025 年 9 月 19 日 发布了 Rust 1.90.0 稳定版本。本次更新在语言特性、编译器、平台支持、标准库、Cargo、Rustdoc 以及兼容性方面带来了重要变化。本文将为你详细解读这些更新。
语言(Language)
将unknown_or_malformed_diagnostic_attributeslint 拆分。
该 lint 已拆分为四个更细化的 lint,现在unknown_or_malformed_diagnostic_attributes是包含以下 lint 的 lint 组:
•unknown_diagnostic_attributes:当前编译器未知的诊断属性
•misplaced_diagnostic_attributes:诊断属性放在了错误的位置
•malformed_diagnostic_attributes:属性语法或选项不正确
•malformed_diagnostic_format_literals:格式化字符串字面量错误
允许常量的最终值中包含对可变/外部内存的引用,但在模式匹配中拒绝此类常量。
允许对非 Rust 内存进行易失性(volatile)访问,包括访问地址0。
编译器(Compiler)
• 在x86_64-unknown-linux-gnu上默认使用lld。
• 三级(Tier 3)musl 目标现在默认使用动态链接。受影响的目标包括:
.
mips64-unknown-linux-muslabi64 powerpc64-unknown-linux-musl powerpc-unknown-linux-muslspe powerpc-unknown-linux-musl riscv32gc-unknown-linux-musl s390x-unknown-linux-musl thumbv7neon-unknown-linux-musleabihf平台支持(Platform Support)• 将
x86_64-apple-darwin降级为Tier 2(含宿主工具)• 有关 Rust 平台分级支持的更多信息,请参考 Rust 官方的 平台支持页面 。
• 稳定化
u*::{checked,overflowing,saturating,wrapping}_sub_signed• 允许在
CStr、CString和Cow之间比较• 移除部分无尺寸元组(unsized tuple)的实现,因为此类元组无法被构造
• 对
UnixStream设置MSG_NOSIGNAL标志•
proc_macro::Ident::new现在支持$crate• 保证
Thread::into_raw返回的指针至少具有 8 字节对齐
•
u{n}::checked_sub_signed•
u{n}::overflowing_sub_signed•
u{n}::saturating_sub_signed•
u{n}::wrapping_sub_signed•
impl Copy for IntErrorKind•
impl Hash for IntErrorKind•
impl PartialEq<&CStr> for CStr•
impl PartialEq for CStr•
impl PartialEq > for CStr•
impl PartialEq<&CStr> for CString•
impl PartialEq for CString•
impl PartialEq > for CString•
impl PartialEq<&CStr> for Cow•
impl PartialEq for Cow•
impl PartialEq for Cow
这些先前已稳定的 API,现在也在const 上下文(const contexts)中稳定:
•
<[T]>::reverse•
f32::floor•
f32::ceil•
f32::trunc•
f32::fract•
f32::round•
f32::round_ties_even•
f64::floor•
f64::ceil•
f64::trunc•
f64::fract•
f64::round•
f64::round_ties_even
• 添加
http.proxy-cainfo配置,用于代理证书•
cargo package使用gix•发布(publish):稳定化多包发布功能
• 新增可折叠所有impl块的功能。此前,“Summary” 按钮和 “-” 快捷键无法折叠 impl 块,现在在按住 Shift 时可以折叠
• 不安全属性会用
unsafe()包裹进行显示
• 在x86_64-unknown-linux-gnu默认使用lld( 详细说明 )
•
core::iter::Fuse的Default实现现在会按文档承诺的那样,内部构造I::default(),而不是总是空的•
UnixStream现在会设置MSG_NOSIGNAL。这可能改变程序行为,但会与其他原语(stdout、网络套接字)一致。依赖信号退出的程序应更新套接字写入错误的处理逻辑• 在 Unix 上,如果
HOME环境变量为空,std::env::home_dir会使用回退值• 统一在所有位置上拒绝不支持的
extern "{abi}",这主要影响对extern "{abi}" fn()指针实现 trait 的情况,例如extern "stdcall" fn(),在不支持该 ABI 的平台(如aarch64-unknown-linux-gnu)上会被拒绝。直接声明或定义这些不支持的 ABI 函数早已被拒绝,本次仅是行为一致化•const-eval:如果初始化一个
static时写入了该static,则报错• 检查
proc_macro_derive宏在 crate 根部被使用时,参数是否正确
Rust 1.90.0 在语言层面增强了诊断 lint 的精细化控制,增强了常量与内存交互的能力;编译器现在对 Linux x86_64 默认使用 lld 链接器,并对部分目标默认启用动态链接;标准库与 const API 覆盖面继续扩大;Cargo 和 Rustdoc 也增加了不少实用功能。同时,部分平台支持状态发生调整,开发者需要关注可能的兼容性变化。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.