Zig0.17.0发布:x86_64-Linux上的增量编译对所有人开放

来源:互联网 时间:2026-10-03

A5站长网10月3日消息,Zig0.17.0正式发布。这个版本攒了5个月的工作量,来自206位贡献者、925次提交,体量在Zig的历史版本里不算小。官方在发布说明开头点出了两件核心工作:构建系统被重构,引入了构建服务器协议;ELF链接器增强之后,增量编译在x86_64-Linux上首次对所有人可用。

构建系统的改动最伤筋动骨。新版把build.zig里的代码、包管理和构建图的执行拆到了独立进程里跑,maker和configurer分离,好处是改build.zig不再需要重建maker,构建速度跟着提升。配套引入了配置缓存的概念,缓存格式换成二进制,文件体积省了约四分之一,命中速度也有改善。包管理相关命令从编译器搬到了构建系统这一侧。

增量编译是另一个被长期关注的能力。在x86_64-Linux上,大多数项目现在可以开启增量构建并配合文件监听使用,改动之后只重编受影响的部分。官方同时给出了限制:这套能力依赖新的ELF链接器,该链接器已完整支持x86_64与SPARC64,部分支持Loongarch,可生成静态库与共享库、处理GOT和DWARF调试信息,但默认仍然是关闭状态。

语言层面的破坏性变更需要提前过一遍。bitCast的语义改成重新解释值的逻辑位表示,对数组和向量类型的行为有变化,而且可能在没有任何编译错误的情况下把现有代码改坏;它还不再允许用在extern struct和extern union上。新增了backingInt、fromBackingInt、divCeil等内置函数,同时移除了void空结构体写法、数组乘法语法、errdefer捕获错误变量,以及i0类型。hasDecl也改成只对公开声明返回真。

标准库这次动的地方也不少。新增的SafeAllocator取代了原来的调试分配器,提供线程安全的保证,退出时能报告所有泄漏,双重释放会直接触发崩溃而不是静默通过,官方给出的基准是峰值内存下降50.3%。集合类型同步重构,动态数组的部分接口改名并加入指针稳定性改进。另外,C语言翻译从编译器里剥离,cImport被移除,改用独立的翻译包。

升级前有两个现实问题要评估。一是这个版本本身就带着若干已知回归,官方在说明里列了出来,包括弱libc符号覆盖、构建系统拆分影响了部分运行步骤的响应文件用法等,非平凡项目升级大概率需要跟进上游的开发流程;二是ZLS这个语言服务器目前还不兼容0.17.0,原因是构建系统的进程拆分,官方说正在协作恢复。对准备在生产项目上跟进的人来说,先在一个分支上跑通再合并,比直接上主干稳妥。

相关文章

标签:

A5创业网 版权所有

返回顶部