Skip to content

【Zig 日报】Zig 编程语言 0.16.0 版本的发布说明 #320

@jiacai2050

Description

@jiacai2050

该版本历时 8 个月开发,包含来自 244 名贡献者的 1183 次提交。以下是核心内容的总结:

1. 核心变革:I/O 接口化 (I/O as an Interface)

这是本版本最重要的变化。Zig 现在要求所有的输入输出操作都通过 Io 实例进行,从而实现了灵活的并发模型:

  • Io.Threaded:基于线程的传统模式(目前“Juicy Main”默认使用)。
  • Io.Evented:实验性的、基于用户态栈切换的并发模式(类似绿色线程)。
  • 新特性:引入了 FutureGroupBatch 等抽象,原生支持操作的取消 (Cancelation) 和超时处理。

2. 语言层面的重大调整

  • @type 被替换:废除了通用的 @Type 内置函数,取而代之的是更具体、易读的函数,如 @Int@Struct@Enum@Pointer 等。
  • C 翻译迁移@cImport 被弃用,C 语言翻译功能移至构建系统 (Build System) 处理,且编译器后端从 libclang 切换到了原生的 arocc
  • 内存安全增强:禁止函数返回局部变量的地址;禁止在 Packed 类型中使用指针。
  • 类型解析重构:重写了内部类型解析逻辑,减少了编译器 Bug,并提供了更清晰的“依赖循环 (Dependency Loop)”错误提示。

3. 标准库与工具链改进

  • “Juicy Main”main 函数现在可以接收一个 std.process.Init 参数,预初始化了分配器 (GPA)、I/O 实例、命令行参数和环境变量,极大简化了样板代码。
  • 环境变量非全局化:为了线程安全,环境变量不再作为全局状态存在,必须通过 Init 获取。
  • 数学与压缩:新增了 Deflate 压缩实现,性能接近 zlib;增强了加密库(新增 AES-GCM-SIV 和 Ascon 等)。
  • Windows 深度优化:完成了向 NtDll 的全面迁移,绕过了 kernel32ws2_32.dll,提高了性能和稳健性。

4. 编译器与构建系统

  • 增量编译 (Incremental Compilation):显著提升了增量编译的速度和稳定性,LLVM 后端现在也支持增量编译。
  • 新 ELF 链接器:作为增量编译下的默认 ELF 链接器,性能大幅提升(部分场景比旧版快 66%)。
  • 包管理优化:支持通过 --fork 标志本地覆盖依赖包;依赖项现在下载到项目本地的 zig-pkg 目录,便于调试和查看源码。
  • Fuzzer 升级:模糊测试工具 Smith 进行了重构,支持多核并行测试和“无限模式”。

5. 目标支持与路线图

  • 平台变动:增加了对 LoongArch32 等新架构的支持,但移除了 Solaris、AIX 和 z/OS 等闭源系统的支持。
  • Tier 系统:明确了四级目标支持体系,x86_64-linux 仍是唯一的 Tier 1 目标。
  • 未来计划:0.17.0 将是一个短周期版本,重点是升级到 LLVM 22 和完善构建系统;长远目标包括 1.0 版本的语言稳定化和完全脱离对 LLD 链接器的依赖。

总结: 0.16.0 是 Zig 迈向稳健生产环境的重要里程碑,通过 I/O 接口化和类型系统重构,语言的工程化能力和编译器性能得到了质的提升。

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群Telegram 群组

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions