文章摘要
Zig编程语言发布0.16.0版本,这是8个月开发工作的成果,包含来自244位贡献者的1183次提交。新版本主要引入了"作为接口的I/O"功能及其他语言改进。Zig致力于开发稳健、高效、可复用的软件,由Zig软件基金会资助,并呼吁通过捐款支持开发。
文章总结
Zig 0.16.0 版本发布说明 ⚡
主要更新
Zig 0.16.0 是一个通用编程语言和工具链,用于维护健壮、优化和可重用的软件。这个版本包含了8个月的工作成果,来自244位不同贡献者的1183次提交。
重要特性
- I/O 作为接口:这是本版本的亮点之一,提供了全新的I/O抽象。
- 语言变更:包括多项语法和语义改进。
- 编译器和构建系统增强:改进了编译器、构建系统、链接器、模糊测试工具和工具链。
目标支持
Zig 支持广泛的架构和操作系统。主要变化包括:
- 新增对多个平台的原生测试支持
- 移除了对Solaris、AIX和z/OS等专有操作系统的支持
- 改进了栈回溯支持
- 修复了大端架构相关的问题
支持等级系统
Zig 对各类目标的支持分为四个等级:
- 一级支持:所有非实验性语言特性正常工作,编译器可不依赖LLVM生成机器码
- 二级支持:标准库跨平台抽象支持这些目标,提供调试信息能力
- 三级支持:通过LLVM生成机器码,可生成目标文件、库和可执行文件
- 四级支持:通过LLVM生成汇编源代码
语言变更
主要改进
- switch表达式增强:支持packed struct和packed union作为分支项
- @Type替换:被多个类型创建内置函数取代,如@Int、@Struct等
- 浮点数转换改进:允许小整数类型隐式转换为浮点数
- 指针类型变更:指向仅编译时类型的指针不再是仅编译时的
- 显式对齐指针:现在与自然对齐指针类型区分开来
破坏性变更
- 禁止返回局部变量地址:防止常见的内存管理错误
- 向量和数组转换限制:不再支持内存中的强制转换
- 打包类型限制:禁止在packed struct和union中使用指针
标准库
I/O 接口
这是本版本最重要的变更之一,所有输入输出功能现在都需要通过Io实例进行。主要特点:
- 提供线程化和事件化两种实现
- 支持任务级抽象和取消操作
- 改进了网络和文件系统操作的集成
其他重要变更
- 内存分配器改进:ArenaAllocator现在线程安全且无锁
- 压缩支持:新增Deflate压缩,简化了解压缩实现
- 调试信息重构:改进了栈回溯和错误报告
- Windows支持增强:完成了向NtDll的迁移
构建系统
- 本地包覆盖:通过
--fork标志可以临时使用本地包替代依赖 - 包管理改进:包现在被下载到项目本地目录
- 单元测试超时:支持为测试设置超时时间
- 错误显示选项:新增
--error-style和--multiline-errors标志
编译器和工具链
- C翻译改进:现在基于arocc而非libclang
- 增量编译:实验性支持,显著加快小型变更的编译速度
- LLVM 21:升级到LLVM 21.1.0
- 新ELF链接器:性能显著提升
路线图
0.17.0版本周期将较短,主要目标是升级到LLVM 22。后续重点工作包括:
- 完善和稳定语言特性
- 完成aarch64后端开发
- 增强链接器实现
- 改进模糊测试工具
- 从LLVM库依赖过渡到Clang进程依赖
致谢
感谢所有贡献者和赞助商对Zig项目的支持。特别感谢每月捐赠50美元以上的赞助商,他们的支持使Zig能够保持开源和社区驱动的发展模式。
完整发布说明包含更多技术细节和迁移指南,请参考官方发布页面。
评论总结
总结评论内容:
- 对"Juicy Main"功能的积极评价
- 认为该功能简化了分配器和argv的样板代码 "The 'Juicy Main' looks like a very nice QoL feature. Gets rid of all the boilerplate for allocators and argv." (评论1)
- 认为这是值得关注的亮点之一 "Obviously, I/O as an interface is the headliner here, but there are lots of other goodies to pay attention to, such as the 'juicy main'." (评论4)
- 对新I/O接口的正面反馈
- 虽然需要重构但认可其设计理念
"The new
Iointerface was a huge breaking change for my project, but I made the transition...Explicit allocators felt obviously right in retrospect, and so far this feels obviously right too." (评论3) - 期待使用新接口开发项目 "I've been waiting eagerly for this release ever since the new Io interface was announced. Pumped to start working on some new projects with this!" (评论2)
- 对游戏开发支持的肯定
- 赞赏整数自动转换为浮点数的特性 "Small integers auto coercing into floats is a nice gift to game devs." (评论4)
- 认为Zig在游戏开发领域有优势 "it could really thrive there due to how easily it can integrate with C & C++" (评论4)
- 提出的疑问和担忧
- 对稳定性路线图的疑问 "Have they said how many breaking changes requiring a rewrite Zig will be going through before it stabilises?" (评论5)
- 对I/O接口实现方式的困惑 "Also I thought Zig doesn't have interfaces....how does the IO one work?" (评论5)
- 其他反馈
- 对SegmentedList被移除表示遗憾 "I'm sad to see SegmentedList go." (评论6)
- 询问新I/O接口对特定系统调用的支持
"wondering if it's possible to use
recvmsgandsendmsgbacked by the newIointerface" (评论6)