Rust 1.96 编程语言现已发布。该语言由 Mozilla 项目创建,目前由独立非营利组织 Rust 基金会支持开发。该语言注重内存安全,并提供了实现高并行度任务执行的工具,同时无需使用垃圾收集器和运行时(运行时简化为标准库的基本初始化和维护)。
Rust 的内存管理方法旨在消除指针操作错误,并防止底层内存管理问题,例如访问已释放的内存、解引用空指针、缓冲区溢出等等。该项目正在开发 Cargo 包管理器,用于分发库、简化构建并管理依赖项。crates.io 仓库用于托管库。
Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。
主要创新:
- 新增了范围模块,实现了旨在替代已弃用的 Range、RangeInclusive、RangeToInclusive 和 RangeFrom 类型的新类型,从而允许在 Copy 结构中存储范围。Range 类型定义了由最小值和最大值限定的范围(但不包含在最小值和最大值范围内);RangeFrom 类型定义了从指定值开始的数值;RangeInclusive 类型定义了指定范围及其上下限范围内的值。未来的版本还将引入 RangeFull 和 RangeTo 类型,旧的实现将迁移到 core::range::legacy::*,并且“N..M”语法将迁移到新的类型变体。
新类型与旧类型的区别在于,它们没有使用 Iterator trait,而是实现了 IntoIterator trait。这意味着它们没有使用内置迭代器,而是定义了如何将类型转换为迭代器。这种方法使得新类型能够使用复制操作(Copy trait,它表示可以通过简单的复制来复制类型的值),而此前由于与内置迭代器的类型不兼容,复制操作无法使用。
例如,新类型使得在完全复制的结构中存储切片的边界成为可能,而无需单独存储起始值和结束值:使用 core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range );impl Span {
pub fn of(self, s: &str) -> &str {
&s[self.0]
}
} - 新增了 `assert_matches!` 和 `debug_assert_matches!` 宏,用于检查值是否与指定模式匹配,如果匹配失败则中止执行。这些新宏与 `assert!(matches!(..))` 和 `debug_assert!(matches!(..))` 表达式的区别在于,它们会打印导致失败的调试信息。为了避免与名称相似的第三方宏冲突,新宏需要显式导入 `core::assert_matches` 库。
使用 core::assert_matches;
fn get_random_number() -> u32 {
4
}fn 主(){
assert_matches!(get_random_number(), 1..=6);
} - 构建 WebAssembly 目标时,链接器的 `--allow-undefined` 选项已被弃用。该选项允许在存在未定义符号的情况下进行链接,这些符号会被转换为从 `env` 模块导入的符号。现在,构建 WebAssembly 时,所有与链接相关的符号默认都必须定义。要恢复旧的行为,您可以使用环境变量 `RUSTFLAGS=-Clink-arg=--allow-undefined` 或在代码中使用表达式 `#[link(wasm_import_module = "env")]`。
- API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
- assert_matches!
- debug_assert_matches!
- 从适用于 AssertUnwindSafe
- 从LazyCell
- 从LazyLock
- core::range::RangeToInclusive
- core::range::RangeToInclusiveIter
- core::range::RangeFrom
- core::range::RangeFromIter
- 核心::范围::范围
- core::range::RangeIter
- Cargo 包管理器已修复漏洞 CVE-2026-5223。该漏洞允许攻击者通过操纵 crate 包内的符号链接,覆盖本地包缓存中来自同一仓库的其他 crate 包的源代码。此漏洞仅在使用第三方包仓库时才会显现,不会影响 crates.io 仓库的用户,因为 crates.io 禁止下载包含符号链接的包。
此外,值得注意的是,已发表了(PDF)对 Rust 语言在资源有限的微控制器和嵌入式系统固件开发中的适用性分析结果。
这项研究由意法半导体公司(STMicroelectronics)开展,并得到了几所欧洲大学的参与。两个独立的开发团队的任务是为采用 Arm Cortex-M33 内核的 STM32U585AI 微控制器实现相同的固件。第一个团队使用 C 语言开发固件,第二个团队使用 Rust 语言开发固件。
对已完成的工作进行测试后发现,在微控制器固件开发方面,使用 C 语言相比 Rust 语言在内存消耗和性能方面并无显著优势。此外,使用开源 Ariel OS 项目中基于 Rust 的系统运行时,Rust 项目的内存消耗低于使用基于 newlib 库的传统固件开发栈的 C 语言实现。
最终,Rust 项目的固件大小为 84100 字节,C 项目的固件大小为 76744 字节(小 10%),但 Rust 固件的内存占用显著更低——24640 字节对比 42608 字节。在性能方面,对最初六周开发的原型进行测试时,Rust 实现的性能是 C 实现的两倍,但两者的性能均远低于预期的最大性能。经过四周的优化,两种实现的性能基本一致,接近预期的最大性能。

来源: opennet.ru
