Hacker News 中文摘要

RSS订阅

Zig 0.16.0 版本发布说明 -- Zig 0.16.0 Release Notes

文章摘要

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 对各类目标的支持分为四个等级:

  1. 一级支持:所有非实验性语言特性正常工作,编译器可不依赖LLVM生成机器码
  2. 二级支持:标准库跨平台抽象支持这些目标,提供调试信息能力
  3. 三级支持:通过LLVM生成机器码,可生成目标文件、库和可执行文件
  4. 四级支持:通过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能够保持开源和社区驱动的发展模式。

完整发布说明包含更多技术细节和迁移指南,请参考官方发布页面

评论总结

总结评论内容:

  1. 对"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)
  1. 对新I/O接口的正面反馈
  • 虽然需要重构但认可其设计理念 "The new Io interface 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)
  1. 对游戏开发支持的肯定
  • 赞赏整数自动转换为浮点数的特性 "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)
  1. 提出的疑问和担忧
  • 对稳定性路线图的疑问 "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)
  1. 其他反馈
  • 对SegmentedList被移除表示遗憾 "I'm sad to see SegmentedList go." (评论6)
  • 询问新I/O接口对特定系统调用的支持 "wondering if it's possible to use recvmsg and sendmsg backed by the new Io interface" (评论6)