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
