【Rust日报】2026-09-09 NVIDIA 推出 CUDA Rust 双轨写内核
内容提要
NVIDIA推出CUDA Rust,支持SIMT和Tile两种编写GPU内核的路径,前者需nightly版本,后者稳定版即可。另有纯Rust图表语言Lini、Rust重写的Battle.net服务Tavern,及讨论Rust空类型非bottom type的文章。
延伸解读
CUDA Rust 双轨设计:如何选择
NVIDIA 为 CUDA Rust 提供 SIMT 和 Tile 两条路径,官方建议优先使用 Tile 路径,因为它只需稳定版 Rust 1.89+ 和 CUDA 13.3,无需 nightly 或自带 LLVM,上手门槛低。而 SIMT 路径(cuda-oxide)需要 pinned nightly、Linux 和 compute capability ≥ 8.0,适合需要细粒度线程或内存控制的场景。开发者可根据项目需求和对底层控制的需求来选择,但需注意 SIMT 路径的环境要求更严格。
Lini 的确定性输出与 CI 友好性
Lini 作为纯 Rust 的图表语言,其输出是确定性且字节级可复现的,这意味着在持续集成(CI)中,对生成的 SVG 进行 diff 测试变得简单可靠。典型图约 2 毫秒的编译时间也保证了效率。此外,它使用 CSS 变量和 light-dark() 函数,使同一份 SVG 能自动适配系统的明暗主题,无需额外脚本,这为文档和网页集成提供了便利。
Tavern 的数字保全定位与限制
Tavern 旨在通过 Rust 重写 Battle.net 账号服务,以保全已退役的 WoW Classic 客户端,使其仍可登录游玩。它明确不面向 Blizzard 当前在服版本或现网服务,且与 Blizzard 无隶属关系。这意味着它仅适用于特定版本(如 Vanilla 1.13/1.14 等)的客户端,且可能涉及法律风险。用户在使用时应明确其非官方性质,并注意合规性。
Rust 空类型与 bottom type 的实践差异
文章指出 Rust 的 ! 类型(never)是 empty type 而非 bottom type,因为 Rust 的子类型主要围绕生命周期,没有真正的 bottom type。这导致在类型嵌套时,! 不会自动进行 coercion,例如 fn(i32) -> ! 不能直接当作 fn(i32) -> i32 使用,需要在外层包装以触发 coercion。这与 Scala 的 Nothing 不同,理解这一差异有助于避免在类型设计时产生误解。
Q&A
NVIDIA CUDA Rust 支持哪两条编写 GPU 内核的路径?
CUDA Rust 支持 SIMT 和 Tile 两条路径。SIMT 路径(cuda-oxide)需要 nightly Rust、Linux、compute capability ≥ 8.0、CUDA 12.x+ 和 clang;Tile 路径(cutile-rs)需要稳定 Rust 1.89+、CUDA 13.3 和 Linux,无需 nightly 或自备 LLVM。
CUDA Rust 的 SIMT 路径(cuda-oxide)如何将 Rust 代码编译到 PTX?
cuda-oxide 是自定义 rustc codegen backend,它将 #[kernel] 函数经过 Rust MIR、社区 Pliron IR 和 LLVM 最终落到 PTX。
CUDA Rust 的 Tile 路径(cutile-rs)有什么特点?
cutile-rs 在 tile 上计算,由 CUDA Tile IR 在首次启动时 JIT 编译。它要求稳定 Rust 1.89+、CUDA 13.3 和 Linux,无需 nightly 或自备 LLVM,使用 cargo add cutile 即可添加依赖。
NVIDIA 官方建议开发者优先使用 CUDA Rust 的哪条路径?
官方建议优先使用 Tile 路径,当需要细粒度线程/内存控制时再下到 SIMT 路径。
Lini 是什么?它有什么特点?
Lini 是纯 Rust(无 unsafe)实现的纯文本图表语言,支持流程图、思维导图、组织图、表格、ER、时序图、图表、工程图、平面图和电路图等,统一语法并编译为可主题化的 SVG。典型图约 2 ms 编译,输出确定性、字节级可复现,便于 CI diff。
Tavern 项目的主要目的是什么?
Tavern 是 wowemulation-dev 用 Rust 重写的 Battle.net 账号与认证替代实现,目的是数字保全已退役的 World of Warcraft Classic 客户端,使它们仍可登录游玩。它覆盖 Vanilla 1.13/1.14、TBC 2.5.x、WotLK 3.4.x、Cataclysm 4.4.x 等版本,但不面向 Blizzard 当前在服版本或现网服务。
Rust 的空类型 ! 与 bottom type 有何区别?
Rust 的空类型 ! 和 bottom type 都无值、无构造,但 empty type 搭配 absurd/! 到任意类型的强制转换,而 bottom type 依赖子类型关系成为所有类型的子类型。Rust 的子类型主要围绕生命周期,因此没有真正的 bottom type。