发布编程语言 Rust 1.75 和 unikernel Hermit 0.6.7

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

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

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

主要创新:

  • 添加了在私有特征中使用“async fn”和“->impl Trait”符号的功能。例如,使用“->impl Trait”,您可以编写一个返回迭代器的特征方法: Trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    您还可以使用“async fn”创建特征: Trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // 将扩展为: // fn fetch(&self, url: Url) -> impl Future; }

  • 添加了用于计算相对于指针的字节偏移量的 API。当使用裸指针(“*const T”和“*mut T”)时,可能需要向指针添加偏移量的操作。以前,为此可以使用“::add(1)”之类的结构,添加与“size_of::()”大小相对应的字节数。新的 API 简化了此操作,并使操作字节偏移成为可能,而无需先将类型转换为“*const u8”或“*mut u8”。
    • 指针::byte_add
    • 指针::字节偏移量
    • 指针::byte_offset_from
    • 指针::byte_sub
    • 指针::wrapping_byte_add
    • 指针::wrapping_byte_offset
    • 指针::wrapping_byte_sub
  • 继续努力提高 rustc 编译器的性能。添加了 BOLT 优化器,该优化器在链接后阶段运行并使用预先准备的执行配置文件中的信息。使用 BOLT 可以通过更改 librustc_driver.so 库代码的布局来将编译器执行速度加快约 2%,从而更有效地使用处理器缓存。

    包括使用“-Ccodegen-units=1”选项构建 rustc 编译器,以提高 LLVM 中的优化质量。执行的测试显示,在“-Ccodegen-units=1”构建的情况下,性能提高了大约 1.5%。默认情况下,仅针对 x86_64-unknown-linux-gnu 平台启用添加的优化。

    前面提到的优化经过 Google 测试,旨在减少用 Rust 编写的 Android 平台组件的构建时间。在构建 Android 时使用“-C codegen-units=1”使我们能够将工具包的大小减少 5.5%,并将性能提高 1.8%,而工具包本身的构建时间几乎增加了一倍。

    启用链接时垃圾收集(“--gc-sections”)可将性能提升高达 1.9%,使链接时优化 (LTO) 提升高达 7.7%,基于配置文件的优化 (PGO) 提升高达 19.8%。最后,使用 BOLT 实用程序进行了优化,这使得构建速度提高到 24.7%,但工具包的大小增加了 10.9%。

    发布编程语言 Rust 1.75 和 unikernel Hermit 0.6.7

  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
    • 原子*::from_ptr
    • 文件时间
    • 文件时间扩展
    • 文件::设置修改
    • 文件::设置时间
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • 选项::as_slice
    • 选项::as_mut_slice
    • 指针::byte_add
    • 指针::字节偏移量
    • 指针::byte_offset_from
    • 指针::byte_sub
    • 指针::wrapping_byte_add
    • 指针::wrapping_byte_offset
    • 指针::wrapping_byte_sub
  • 函数中使用了“const”属性,它决定了在任何上下文中使用它而不是常量的可能性:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::归零
    • 内存::判别式
    • 内存::归零
  • 已为 csky-unknown-linux-gnuabiv2hf、i586-unknown-netbsd 和 mipsel-unknown-netbsd 平台实现了第三级支持。第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。

此外,我们还可以注意到 Hermit 项目的新版本,它开发了一个用 Rust 语言编写的专用内核 (unikernel),提供了用于构建独立应用程序的工具,这些应用程序可以在虚拟机管理程序或裸硬件之上运行,无需额外的层并且没有操作系统。构建后,应用程序静态链接到一个库,该库独立实现所有必要的功能,而不依赖于操作系统内核和系统库。该项目代码根据 Apache 2.0 和 MIT 许可证分发。支持汇编以独立执行用 Rust、Go、Fortran、C 和 C++ 编写的应用程序。该项目还在开发自己的引导加载程序,允许您使用 QEMU 和 KVM 启动 Hermit。

来源: opennet.ru

添加评论