Rust 1.64 编程语言发布

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

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

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

主要创新:

  • 对环境的要求日益提高 Linux 在编译器、Cargo 包管理器和标准库 libstd 中,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. 对于在旧内核环境下使用 Rust 工具链构建的可执行文件的用户 Linux建议升级他们的系统,继续使用较旧的编译器版本,或者独立维护自己的 libstd 分支并添加中间层以保持兼容性。

    停止对老年人的支持的原因有很多。 Linux-systems 提到,由于资源有限,难以继续维护与旧环境的兼容性。鉴于 LLVM 和交叉编译工具的版本要求不断提高,对旧版 Glibc 的支持需要在持续集成系统中使用旧版工具进行代码检入。内核版本要求提高的原因是,libstd 中新增的系统调用无需维护中间层即可确保与旧内核的兼容性。

  • IntoFuture 特性已稳定。它类似于 IntoIterator,但不同之处在于它使用 `.await` 而不是 `for...in...` 循环。与 IntoFuture 结合使用时,`.await` 关键字不仅可以等待 Future 特性,还可以等待任何可以转换为 Future 的类型。
  • rust-analyzer 工具包含在 Rust 发行版附带的工具集中。它也可以使用 rustup 安装(rustup component add 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
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • core::ffi 和 std::ffi 模块已更新,采用了之前在 std::os::raw 模块中稳定的 C 类型(例如,已提议使用 c_uint 和 c_ulong 类型来表示 uint 和 ulong C 类型):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • 用于 Poll 机制的底层处理程序已经稳定(未来计划推出简化的 API,不再需要使用 Pull 和 Pin 等底层结构):
    • future::poll_fn
    • 任务::准备就绪!
  • “const”标志用于确定是否可以在任何上下文中使用它而不是常量,该标志在 slice::from_raw_parts 函数中使用。
  • 为了提高数据存储效率,Ipv4Addr、Ipv6Addr、SocketAddrV4 和 SocketAddrV6 结构的内存布局已更改。这可能会破坏与某些使用 std::mem::transmute 进行底层结构操作的 crate 包的兼容性。
  • 在平台的 Rust 编译器构建中 Windows 采用 PGO 优化(基于配置文件的优化),可以将代码编译性能提高 10-20%。
  • 编译器新增了一项针对某些结构体中未使用字段的警告功能。

此外,值得一提的是,gccrs 项目(GCC Rust)开发的替代 Rust 编译器实现已获准纳入 GCC,其开发进展报告也值得关注。前端集成后,标准的 GCC 工具链将能够编译 Rust 程序,而无需安装使用 LLVM 开发构建的 rustc 编译器。目前开发工​​作进展顺利,如无意外,Rust 前端将集成到计划于明年 5 月发布的 GCC 13 版本中。GCC 13 中的 Rust 实现将为 beta 版本,默认情况下尚未启用。

来源: opennet.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster