< 返回版块

Yuan YQ 发表于 2025-04-07 10:52

Rust 1.86.0 发布

Rust 团队发布了 Rust 1.86.0 版本,通过 rustup update stable 可更新。该版本带来多项重要更新,包括支持 trait 向上转型、HashMap 和切片可同时获取多个元素的可变引用、安全函数可使用 #[target_feature] 属性、新增指针非空调试断言、missing_abi lint 默认警告、1.87.0 版本将弃用 i586-pc-windows-msvc 目标平台,还稳定了一批 API。

  1. 新特性

    • trait 向上转型:实现了 trait 对象的向上转型,若 trait 存在上级 trait,可将该 trait 对象的引用强制转换为上级 trait 对象的引用,如 Arc<dyn Trait> -> Arc<dyn Supertrait> 等。此前需在 trait 内定义 upcast 方法实现,且仅适用于一种引用 / 指针类型,现在不再需要。使用 Any trait 时,该特性可将 trait 对象向上转型为 dyn Any,调用 Anydowncast 方法 。
    • HashMap和切片支持多元素可变索引:标准库提供 get_disjoint_mut 辅助函数,切片和 HashMap 可同时获取多个元素的可变引用,解决了借用检查器阻止重复调用 get_mut 方法获取的引用同时使用的问题。
    • 安全函数使用 #[target_feature] 属性:稳定了 target_feature_11 特性,允许安全函数使用 #[target_feature] 属性。标记该属性的安全函数,只能在同样标记了该属性的函数中安全调用;在未标记的函数中调用时,需在 unsafe 块内进行,且调用者要确保目标特性可用。
  2. 增强与变更

    • 指针非空调试断言:编译器会在非零大小读写和指针重新借用为引用时,插入指针非空的调试断言。如 let _x = *std::ptr::null::<u8>(); 在启用调试断言时会触发非展开式 panic。该断言仅在启用调试断言时生效,不能依赖其保证程序正确性。
    • missing_abi lint 默认警告:在 extern 块和函数中省略 ABI(如extern {}extern fn)会触发 missing_abi lint 警告。建议显式指定 "C" ABI(如extern "C" {}extern "C" fn)。
  3. 目标平台变更:1.87.0 版本将移除 tier-2 目标平台 i586-pc-windows-msvc,因其与 i686-pc-windows-msvc 的区别在于不要求 SSE2 指令支持,但 Windows 10(除win7 目标外所有 windows 目标的最低要求操作系统版本)本身需要 SSE2 指令。使用该目标平台的用户应在 1.87.0 发布前迁移至 i686-pc-windows-msvc

  4. 稳定的 API

    • 新稳定 API:包括 {float}::next_down{float}::next_up[T]::get_disjoint_mut 等多个 API。

    • const 上下文稳定的 API:如 hint::black_boxio::Cursor::get_mut 等 API 在 const 上下文中稳定。

原文:https://blog.rust-lang.org/2025/04/03/Rust-1.86.0.html

Rust TUI systemd 管理工具

systemd-manager-tui 是一个用 Rust 编写的用于通过文本用户界面(TUI)管理 systemd 服务的项目。该项目提供了一个 TUI 程序,允许用户使用 D - Bus API 对 systemd 服务进行列出、启动、停止、重启、启用和禁用等操作。

  1. 服务列表:列出所有 systemd 服务,并可以根据服务名称进行过滤。
  2. 服务操作:对选定的服务进行启动、停止、重启、启用和禁用操作。
  3. 用户交互:通过键盘快捷键进行导航和操作,如 ↑/↓ 导航、s 启动、r 重启等。

Github 仓库:https://github.com/Matheus-git/systemd-manager-tui

mem-isolate:安全运行 unsafe Rust 代码的库

mem-isolate 是一个用于安全运行 unsafe Rust 代码的库,其核心目的是通过 fork() 系统调用执行用户提供的函数,确保函数执行期间的内存变化不会影响父进程的内存占用,使函数在内存操作上表现得像纯函数。以下是对该仓库的详细介绍:

功能概述

  • 内存隔离:借助 fork() 系统调用创建子进程,在子进程中执行用户提供的函数,保证函数执行过程中的内存修改不会对父进程的内存产生影响。
  • 结果传递:子进程将执行结果使用 bincode 进行序列化,然后通过管道传递给父进程,父进程再对结果进行反序列化。
  • 错误处理:针对不同的错误情况进行分类处理,将错误分为三个级别,方便用户根据错误类型采取不同的处理策略。
use mem_isolate::execute_in_isolated_process;

// No heap, stack, or program memory out here...
let result = mem_isolate::execute_in_isolated_process(|| {
    // ...Can be affected by anything in here
    unsafe {
        gnarly_cpp_bindings::potentially_leaking_function();
        unstable_ffi::segfault_prone_function();
        heap_fragmenting_operation();
        something_that_panics_in_a_way_you_could_recover_from();
    }
});

Github 仓库:https://github.com/brannondorsey/mem-isolate

--

From 日报小组 Yuan YQ

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页