< 返回版块

Mike Tang 发表于 2026-10-14 09:05

借用检查器有个 11 年的不健全问题

这是 rust-lang/rust 的 issue #164250,标题是 struct's lifetime requirements can be bypassed via covariant field assignment。结构体上的生命周期要求可以通过协变字段赋值被绕过。noop_noob 把它发到 r/rust,帖子标题写成 9-year-old gaping hole,目前 682 分、100 条评论。

类型组的 lcnr 在 issue 里补充了背景。这个 bug 已经存在 11 年,级别是 P-high。同类问题如果是新发现的,会标成 P-critical。11 年里没有被人碰到,说明它并不容易触发。要利用它,需要故意写一个恶意的 Drop 实现。类型组正在做 next-generation trait solver、region constraint rework,以及 Project Zero,目标是修掉已知的类型系统不健全,并减少未知问题。

示例在当前 nightly,以及至少到 1.85.0 的 stable 上能编译。打开 AddressSanitizer 后,报告是 stack-use-after-scope。issue 里附了两份 Godbolt:https://rust.godbolt.org/z/83MvfbKde 和 https://rust.godbolt.org/z/GsGdqqMWe 。

原文链接:https://github.com/rust-lang/rust/issues/164250

Asterinas 0.19.0 加上 AArch64 和 DRM

Asterinas 是用 Rust 写的 Linux 兼容内核。0.19.0 于 2026 年 10 月 13 日发布,公告在 https://asterinas.github.io/2026/10/13/announcing-asterinas-0.19.0.html ,标签是 https://github.com/asterinas/asterinas/releases/tag/v0.19.0 。仓库贡献者已经超过 100 人,代码超过 25 万行,其中约 20 万行是 Rust。这个版本有 55 位贡献者,其中 31 位是第一次提交。

图形栈换成了 DRM。Asterinas NixOS 可以在标准 modesetting 驱动上跑 Xorg,上面是 Mesa 的软件 OpenGL,不再只走旧的 fbdev。新的 aster-drm 提供 DRM core、/dev/dri、GEM dumb buffer 和 KMS。CPU 架构新增 AArch64,排在 x86-64、RISC-V、LoongArch 之后,目前是 Tier 2。QEMU virt 上能拉起 GICv3、generic timer、PL031 RTC、PL011 UART 和 virtio-mmio,并跑 BusyBox,带 vDSO。Docker 镜像同时提供 linux/arm64 和 linux/amd64。

虚拟化放在 OSTD 里。需要 unsafe 的代码集中在 OSTD 的虚拟化模块,目前大约 2000 行。上面的虚拟机逻辑可以用安全 Rust 写。0.19.0 交付了 Intel VMX 基础:VMX 生命周期、VMCS、EPT guest 内存、guest CPU 状态,以及把每次 VM exit 交回调用方。文档里有一份大约 100 行安全 Rust 的最小 hypervisor 示例,地址是 https://asterinas.github.io/book/ostd/a-100-line-hypervisor.html 。同一版还放上了 aster-device,用类型区分 bus、driver、class 和 device,组件本身是安全 Rust。Asterinas NixOS 现在可以在虚拟机里编译并启动下一份 Asterinas 内核。

原文链接:https://asterinas.github.io/2026/10/13/announcing-asterinas-0.19.0.html

Creusot 0.14.0 给 snapshot 生成验证条件

Creusot 是给安全 Rust 做形式化验证的工具。它给 Rust 加上合约,再用 SMT solver 做半自动证明。作者 Syrak 在 r/rust 宣布 0.14.0。changelog 日期是 2026-10-09,GitHub release 由 Lysxia 在 2026-10-12 发出。说明见 https://devlog.creusot.rs/v0-14-0/ ,变更列表在 https://github.com/creusot-rs/creusot/blob/master/CHANGELOG.md#0140---2026-10-09 。

0.13.0 起,PartialOrd 的逻辑规格从全序放宽到偏序。PartialOrdLogic 用 lt_log 表示 <,要求非自反和传递。OrdLogic 把全序单独写成一条 law:对任意 x、y,x < y || x == y || y < x 成立。devlog 写明,已有证明没有因为这次改动失效。

0.14.0 会给 snapshot 里的逻辑函数调用生成验证条件。程序里写 snapshot!(lemma(n)) 时,Creusot 会断言 lemma 的前置条件,并假设后置条件,而且这两个条件会特化到参数 n。snapshot 在编译时会被擦掉,不产生真正的 Rust 函数调用,也不用为了过借用检查再包一层。Pearlite 规格现在也能在 rust-analyzer 里跳转到定义。规格宏展开后的 token span 原先太粗,跳转会带出一串无关标识符。Sarah Quiñones 把运算符对应的标识符 span 收窄后,跳转结果可用。编辑器配置在 https://guide.creusot.rs/quickstart/editor_config.html 。

原文链接:https://devlog.creusot.rs/v0-14-0/

Proa:人和 agent 共用的 Rust Web 框架

Proa 是一个 Rust Web 框架,仓库在 https://github.com/Proa-Labs/proa ,协议是 Apache 2.0。作者 hariria 在 r/rust 发了发布帖。组件用 Rust trait 共享数据和类型化的子节点,各渲染目标再分别实现 HTML、Markdown 或其他格式。浏览器侧的 signal 和事件处理也用 Rust 写,RSJS 把这部分编译成 JavaScript。框架还带 streaming SSR、类型化的数据加载和请求上下文、Axum adapter、ORM、CLI 和 Tailwind。组件库在 https://ui.proa.so/ ,文档在 https://proa.so/docs 。

作者写明,他们测过的服务端渲染框架里 Proa 最快,整页渲染时间经常落在一次 memcpy 的一个数量级以内。基准仓库是 https://github.com/Proa-Labs/proa-benchmarks 。服务端优先的模型不适合把浏览器当主执行环境的 SPA,小站点也可能过重。编译时间目前偏长,相关改动在 https://github.com/Proa-Labs/proa/pull/13 。

原文链接:https://github.com/Proa-Labs/proa


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页