Rust 1.74 编程语言发布。 RustVMM 审计。 用 Rust 重写 Binder

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

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

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

主要创新:

  • 添加了通过 Cargo.toml 文件和包管理器清单配置 lint 检查的功能。 为了定义 lint 设置,例如响应级别(禁止、拒绝、警告、允许),建议使用新部分“[lints]”和“[workspace.lints]”,在做出相关决定时会考虑其中的更改重建。 例如,在汇编或添加“#![forbid(unsafe_code)]”和“#![deny(clippy)”时,不要指定“-F”、“-D”、“-W”和“-A”标志:” 代码的属性) :enum_glob_use)]” 现在可以在 Cargo 清单中使用: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • Crate 包管理器添加了连接到存储库时进行身份验证的功能。 基本包包括对在 Linux 凭证存储(基于 libsecret)、macOS(钥匙串)和 Windows(Windows 凭证管理器)中放置身份验证参数的支持,但该系统最初是模块化的,允许您组织与各种提供商的工作来存储和管理身份验证参数。生成令牌,例如,已经准备了一个插件用于使用 1Password 密码管理器。 存储库可能需要对任何操作进行身份验证,而不仅仅是为了确认包已发布。 ~/.cargo/config.toml [注册表] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • 对返回类型投影 (impl_trait_projections) 的支持已经稳定,允许在返回类型中提及 Self 和 T::Assoc,例如“async fn”和“->impl Trait”。 struct Wrapper<'a, T>(&'a T); // 提及 `Self` 的不透明返回类型: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } 特征 Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // 提及关联类型的不透明返回类型: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl 迭代器{ /* … */ } }
  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
  • 函数中使用了“const”属性,它决定了在任何上下文中使用它而不是常量的可能性:
    • 核心::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • 核心::num::饱和
    • 为 std::process::Stdio 实现 From
    • 为 std::process::Stdio 实现 From
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::错误::其他
    • 实现 TryFrom 16岁以下
    • 暗示来自<&[T; N]>对于向量
    • 暗示从<&mut [T; N]>对于向量
    • 暗示从<[T; N]> 表示弧 <[T]>
    • 暗示从<[T; N]> 对于 Rc<[T]>
  • 编译器、工具包、标准库和生成的应用程序可执行文件对 Apple 平台的要求有所提高,现在至少需要 macOS 10.12 Sierra、iOS 10 和 10 年发布的 tvOS 2016 才能运行。
  • 已为 i686-pc-windows-gnullvm 平台实现了第三级支持。 第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。
  • 已经实现了对loongarch64-unknown-none目标平台的第二级支持。 第二级支持涉及装配保证。

此外,还有两个与 Rust 语言相关的事件值得关注:

  • 旨在加强开源项目安全性的 OSTIF(开源技术改进基金)发布了 RustVMM 项​​目的审计结果,该项目提供了用于创建特定于任务的虚拟机管理程序和虚拟机监视器 (VMM) 的组件。 英特尔、阿里巴巴、亚马逊、谷歌、Linaro 和红帽等公司都参与了该项目的开发。 Intel Cloud Hypervisor 和 Dragonball hypervisor 正在基于 RustVMM 开发。 审计确认了代码库的高质量以及旨在实现最大安全性的架构和实现中技术的使用。 审核中发现6个不直接影响安全的问题。
  • Google 向 Linux 内核开发者邮件列表介绍了用 Rust 语言重写的 Binder 进程间通信机制的新实现。 此次返工是作为一个项目的一部分进行的,该项目旨在加强安全性、推广安全编程技术并提高在 Android 中使用内存时识别问题的效率(Android 中识别的所有危险漏洞中约 70% 是由使用内存时的错误引起的) )。 Rust 中 Binder 的实现实现了与 C 语言原始版本的功能对等,通过了所有 AOSP(Android 开源项目)测试,可用于创建固件的工作版本。 两种实现的性能大致处于同一水平(偏差在 -1.96% 和 +1.38% 范围内)。

来源: opennet.ru

添加评论