Rust 1.64 编程语言发布

Rust 1.64 通用编程语言的发布已经发布,该语言由 Mozilla 项目创建,但现在由独立的非营利组织 Rust 基金会赞助开发。 该语言专注于内存安全,并提供了实现高作业并行性的方法,同时避免使用垃圾收集器和运行时(运行时减少为标准库的基本初始化和维护)。

Rust 的内存处理方法使开发人员在操作指针时避免错误,并防止由于低级内存处理而出现的问题,例如在内存区域被释放后访问它、取消引用空指针、缓冲区溢出等。 为了分发库、提供构建和管理依赖项,该项目开发了 Cargo 包管理器。 crates.io 存储库支持托管库。

Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。

主要创新:

  • 编译器、Cargo 包管理器和 libstd 标准库对 Linux 环境的要求均有所提高——Glibc 的最低要求从版本 2.11 提高到 2.17,Linux 内核从版本 2.6.32 提高到 3.2。这些限制也适用于使用 libstd 构建的 Rust 应用程序可执行文件。发行套件 RHEL 7、SLES 12-SP5、Debian 8 和 Ubuntu 14.04 满足新要求。将停止对 RHEL 6、SLES 11-SP4、Debian 7 和 Ubuntu 12.04 的支持。我们鼓励在具有较旧 Linux 内核的环境中使用 Rust 构建的可执行文件的用户升级其系统,保留旧版本的编译器,或维护自己的 libstd 分支以保持兼容性。

    终止对旧版 Linux 系统的支持的原因之一是继续维持与旧版环境的兼容性的资源有限。面对 LLVM 和交叉编译实用程序不断增加的版本要求,对遗留 Glibc 的支持需要在签入持续集成系统时使用遗留工具。内核版本要求的增加是因为能够在 libstd 中使用新的系统调用,而无需维护层以确保与旧内核的兼容性。

  • IntoFuture 特征已经稳定,它类似于 IntoIterator,但与后者不同的是使用“.await”而不是“for ... in ...”循环。当与 IntoFuture 结合使用时,“.await”关键字不仅可以预期 Future 特征,还可以预期可以转换为 Future 的任何其他类型。
  • rust-analyzer 实用程序包含在 Rust 版本提供的实用程序集合中。该实用程序还可以使用 rustup(rustup 组件添加 rust-analyzer)进行安装。
  • Cargo 包管理器包括工作区继承,以消除包之间公共字段值的重复,例如 Rust 版本和存储库 URL。还添加了对同时构建多个目标平台的支持(您现在可以在“--target”选项中指定多个参数)。
  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
    • 未来::走向未来
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • 之前在 std::ffi 模块中稳定的 C 兼容类型已添加到核心和 alloc 库中:
    • 核心::ffi::CStr
    • 核心::ffi::FromBytesWithNulError
    • 分配::ffi::CString
    • 分配::ffi::FromVecWithNulError
    • 分配::ffi::IntoStringError
    • 分配::ffi::NulError
  • 之前在 std::os::raw 模块中稳定的 C 类型已添加到 core::ffi 和 std::ffi 模块中(例如,针对 uint 和 ulong C 类型提出了 c_uint 和 c_ulong 类型):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • 菲::c_int
    • 菲::c_long
    • 菲::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • 菲::c_uchar
    • ffi::c_uint
    • 菲::c_ulong
    • 菲::c_ulonglong
    • ffi::c_ushort
  • 低级处理程序已经稳定用于 Poll 机制(将来计划提供一个简化的 API,不需要使用 Pull 和 Pin 等低级结构):

    • 未来::poll_fn
    • 任务::准备好了!
  • “const”属性决定了在任何上下文中使用它而不是常量的可能性,在 slice::from_raw_parts 函数中使用。
  • 为了更紧凑地存储数据,Ipv4Addr、Ipv6Addr、SocketAddrV4 和 SocketAddrV6 结构体的内存布局已更改。使用 std::mem::transmute 进行结构低级操作的单个 crate 包可能存在兼容性问题。
  • Windows 平台的 rust 编译器的构建使用了 PGO 优化(配置文件引导优化),这使得代码编译性能提高了 10-20%。
  • 编译器对某些结构中未使用的字段实施了新的警告。

此外,您还可以注意到有关 Rust 语言编译器替代实现开发的状态报告,该报告由 gccrs 项目 (GCC Rust) 准备并批准包含在 GCC 中。集成前端后,可以使用标准GCC工具编译Rust语言程序,无需安装使用LLVM开发构建的rustc编译器。只要开发步入正轨,并且除非出现任何不可预见的问题,Rust 前端将被集成到计划于明年 13 月发布的 GCC 13 中。 Rust 的 GCC XNUMX 实现将处于 beta 状态,默认情况下尚未启用。

来源: opennet.ru

添加评论