NVIDIA 推出 CUDA Rust:两条路径写 GPU 内核
NVIDIA 于 2026 年 9 月宣布推进原生 Rust GPU 编程,目标是让 GPU 内核可直接用 Rust 编写并编译到 PTX,而不再只是从 Rust 启动其他语言写的内核。公司已有 Nova Linux 驱动、Dynamo 的 Rust 核心以及 NVTX 的 Rust 绑定;CUDA Rust 补齐内核侧缺口,并计划持续成熟到 2027 及以后。
CUDA Rust 对应 CUDA 本身的两条路径。SIMT 路径是 cuda-oxide:自定义 rustc codegen backend,把 #[kernel] 函数经 Rust MIR、社区 Pliron IR 与 LLVM 落到 PTX;需要 pinned nightly、Linux、compute capability ≥ 8.0、CUDA 12.x+ 与 clang。可用 cargo oxide new/run 生成并运行向量加法示例。安全面上,可变输出用 DisjointSlice 给每线程独占元素;#[launch_contract] 与 prepare_* 在启动前校验配置。Tile 路径是 cutile-rs:在 tile 上计算,由 CUDA Tile IR 在首次启动时 JIT;要求稳定 Rust 1.89+、CUDA 13.3、Linux,无需 nightly 或自备 LLVM,cargo add cutile 即可。官方建议优先用 Tile,需要细粒度线程/内存控制时再下到 SIMT;并计划支持跨语言互操作。
原文链接:https://developer.nvidia.com/blog/introducing-cuda-rust-two-tracks-for-writing-gpu-kernels/
Lini:纯 Rust 的纯文本图表语言
Lini 是纯 Rust(无 unsafe)实现的小型纯文本语言,把流程图、思维导图、组织图、表格、ER、时序图、图表、工程图、平面图与电路图等统一到同一套语法,编译为可主题化的 SVG。典型图大约 2 ms 编译,输出确定性、字节级可复现,便于 CI diff。颜色使用 CSS 变量与 light-dark(),同一份 SVG 可跟随系统明暗主题,无需脚本重渲染。
形态是单个原生二进制,另有 lini-wasm 供浏览器/Node 使用,以及 mdbook-lini、astro-lini 集成。安装:cargo install lini;lini diagram.lini -o diagram.svg 出图,lini serve 可热重载预览。站点与 playground 见 lini.rs,仓库 monfa-red/lini,另提供面向 agent 的 SKILL.md。作者称约三个月完成。
原文链接:https://github.com/monfa-red/lini
Tavern:用 Rust 重做 Battle.net 账号服务,保全退役 WoW Classic 客户端
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 等线到文档给出的 build 截止点;明确不面向 Blizzard 当前在服版本或现网服务,也与 Blizzard 无隶属关系。
提供三个共享同一 Postgres 账号库的服务:oauth-server、account-server、bgs-server。OAuth/OIDC 侧包括 discovery、RS256 JWT/JWKS、授权码 + PKCE、刷新令牌轮换、设备授权、以及面向桌面应用的 token exchange / SSO。浏览器走 SRP6a 登录;游戏客户端支持 BnetSRP6v2 与 Vanilla 的 sha_pass_hash。传输上兼容 BGS v1(1.13.x 的 raw TCP)与 WebSocket BGS v2。状态为 actively developed。
原文链接:https://github.com/wowemulation-dev/tavern
文章:Rust 的空类型 ! 并不是 bottom type
ettolrach 于 2026-09-08 发文讨论近期可在更多类型位置使用的空类型 !(never)。相关 PR 约在 2026-08-25 合并,写作时计划进入 Rust 1.100。文中区分 empty type 与 bottom type:二者都无值、无构造;empty 搭配 absurd/! 到任意类型的强制转换,bottom 则依赖子类型关系成为所有类型的子类型。
Rust 的子类型主要围绕生命周期,因此没有真正的 bottom type。对裸 ! 表达式,编译器会做 coercion;但若 ! 嵌在其他类型里(例如 fn(i32) -> ! 不能直接当成 fn(i32) -> i32),则不会自动转换,需要在外层再包一层,让真正的 ! 值出现在可 coercion 的位置。文中用 Scala 的 Nothing 对照说明这一实践差异。
原文链接:https://ettolrach.com/blog/rust_when_empty_isnt_bottom.html
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论