Rust 1.98 编程语言现已发布。该语言由 Mozilla 项目创建,目前由独立非营利组织 Rust 基金会支持开发。该语言注重内存安全,并提供了实现高并行度任务执行的工具,同时无需使用垃圾收集器和运行时(运行时简化为标准库的基本初始化和维护)。
Rust 的内存管理方法旨在消除指针操作错误,并防止底层内存管理问题,例如访问已释放的内存、解引用空指针、缓冲区溢出等等。该项目正在开发 Cargo 包管理器,用于分发库、简化构建并管理依赖项。crates.io 仓库用于托管库。
Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。
主要创新:
- 对于 f32 和 f64 浮点类型,实现了加法、减法、乘法、除法和求余的代数方法,其优化类似于 C/C++ 编译器中的“-ffast-math”选项。这些方法允许在必要时改变运算顺序,例如用于循环向量化等优化。举例来说,当使用常规加法计算“a + b + c + d”时,编译器始终按相同的顺序执行计算:“((a + b) + c) + d”,但使用 algebraic_add 方法,它可以将表达式分组为“(a + b) + (c + d)”,并使用 SIMD 指令并行执行“(a + b)”和“(c + d)”。使用代数方法的代价是计算结果的不确定性,其变化可能在误差范围内。
- 所有基本整数类型都内置了 `format_into` 方法,用于将数字转换为字符串,该方法可以替代 itoa 包。NumBuffer 缓冲区作为参数传递。其大小保证足以写入所用类型的任何十进制值。输出是一个格式化字符串 &str,其生命周期与缓冲区大小绑定。
- ManuallyDrop 线束与 Box 智能指针之间的交互不再导致未定义行为。
- API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
- str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- <{integer}>::format_into
- 发送/同步 std::process::CommandArgs
- {fN}::algebraic_add
- {fN}::algebraic_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero<{integer}>::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- 原子::from_mut
- 原子::get_mut_slice
- 原子::from_mut_slice
- std::range::legacy
- 目标平台 thumbv7a-none-eabi、thumbv7a-none-eabihf、thumbv7r-none-eabi、thumbv7r-none-eabihf 和 thumbv8r-none-eabihf 已升级到第二级支持,其中包括构建保证,但不保证通过测试套件。
- 现已新增对 powerpc64-unknown-linux-gnuelfv2 和 aarch64-unknown-linux-pauthtest 平台的支持,目前支持级别为 3 级。3 级支持包含基本支持,但不包括自动化测试、官方版本发布或构建验证。
此外,热门 crate 包 arrayref 也遭到了攻击。该包在过去 90 天内下载量超过 5300 万次,并被 403 个软件包用作依赖项。攻击者向 crates.io 代码库发布了包含恶意代码的新软件包:proc-macro1、proc-macro-en、aovine、arone、aronenao 和 tinymember。随后,arrayref 0.3.10、internment 0.8.7 和 append-only-vec 0.1.9 的新版本也被发布到该代码库,每个版本都将恶意软件包 proc-macro1 作为依赖项。恶意版本的 arrayref 软件包于 8 月 20 日上午 10:15(莫斯科时间)发布,并一直活跃到上午 11:41,之后被 crates.io 管理员移除。
目前尚未联系到 arrayref 的维护者以澄清情况,但据信其凭据已被攻击者截获。在 proc-macro1 软件包中,构建脚本存在恶意修改,导致从外部目录加载了一个可执行文件。 伺服器下载的文件在 Unix 系统上保存为 /tmp/rust-setup,在 Windows — %TEMP%\rust-setup.ps1 或 %TEMP%\rust-setup-launch.vbs。
来源: opennet.ru
