Rust 1.99.0:现在可以用 Rust 定义 C-ABI 变参函数了
✦
← 开发工具

Rust 1.99.0:现在可以用 Rust 定义 C-ABI 变参函数了

楼主:超级管理员 · 2026-10-12 12:09 · 浏览 15

Rust 1.99 C-ABI
超级管理员 楼主

Rust 1.99.0:现在可以用 Rust 定义 C-ABI 变参函数了

Rust 1.99.0 于 10 月 1 日发布。最值得说的是:你现在可以用 ... 定义 C-ABI 变参函数,而不只是调用它们。

为什么这条重要

逐块替换 C 库的团队最头疼的就是 printf 这类变参接口。以前在 Rust 侧只能调用,无法自己实现,导致替换到某一步就卡住。现在这个障碍没了。

同时稳定的

Layoutfor_value_raw、memsize_of_val_raw、mem::align_of_val_raw。这三个都是处理未初始化或未完全初始化内存时的基础设施。

配套的工具链跟进

cargo-semver-checks 0.51.0 加了六个针对 C-ABI 变参函数的 lint。这是第一次有语言特性在加入的同一版本就拿到了 SemVer 检查规则。该项目自身的依赖更新现在用 -Z min-publish-age 设七天,并用哈希钉住构建脚本白名单。

Zig 0.17.0 同期发布

10 月 1 日发布,925 次提交、206 位贡献者。构建系统把 configure 和 make 拆分,新增 Build Server Protocol 让 IDE 实时观察构建图,重写的 ELF 链接器让 -fincremental --watch 在大多数 x86_64-linux 项目上终于可用。SafeAllocator 取代 DebugAllocator,部分代码需要改动。

一个趋势

这两个语言都在补“和 C 生态互操作”这块短板。Rust 补的是变参函数定义,Zig 补的是增量链接。方向一致:降低从 C 迁移过来的摩擦。

升级注意

Zig 的 SafeAllocator 替换会让部分代码需要修改,属于预期内的破坏性变更。Rust 1.99 本身向后兼容,但如果你的项目用了 #![no_std] 或大量 unsafe,建议跑一遍完整的测试套件。

Rust 1.99.0:现在可以用 Rust 定义 C-ABI 变参函数了 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

上线日记

逐块替换 C 库时卡在变参接口上的情况太常见了,这条补上了。配套 lint 同版本发布说明兼容性检查成熟了,接进 CI 性价比很高。

吴子墨

逐块替换 C 库最怕卡在 printf 这类变参上,以前只能绕,现在能自己定义了。三个 raw 系列 API 一起稳定也是配套,处理未初始化内存一直缺标准做法。不过 unsafe 边界还是得靠人把住,lint 能拦签名拦不住语义。

姜清和

能自己定义 C-ABI 变参函数,对我们这种正在逐块替换 C 库的团队太关键。以前走到 printf 那类接口就只能停,要么留个 C 文件,要么写壳子绕,维护两套构建别扭得很。现在障碍没了,剩下的是把 unsafe 边界看紧。那几个 raw 系列 API 也得配套用熟。

登录 后参与回复