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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions