Hacker News 中文摘要

RSS订阅

Zig语言实现io_uring和Grand Central Dispatch的std.Io模块已落地 -- Zig – io_uring and Grand Central Dispatch std.Io implementations landed

文章摘要

Zig编程语言开发日志更新,主要记录了2026年2月13日的进展:Jacob为0.16.0版本周期收尾工作,实现了std.Io.Evented对io_uring和Grand Central Dispatch的支持。

文章总结

以下是经过编辑整理后的中文内容,保留了主要技术细节并删除了非主题相关内容:


Zig编程语言开发日志(2026年2月13日)

标题:io_uring与Grand Central Dispatch的std.Io实现落地
作者:Andrew Kelley

在0.16.0版本周期接近尾声时,Jacob完成了std.Io.Evented的API适配工作:
- io_uring实现
- Grand Central Dispatch实现

这两个实现均基于用户态栈切换技术(又称"纤程"或"绿色线程"),目前处于实验性阶段,需完成以下后续工作:
- 改进错误处理
- 移除调试日志
- 排查编译器在IoMode.evented模式下的性能下降问题
- 增加测试覆盖率

代码示例展示了如何通过替换I/O实现(线程模式/事件模式)运行同一段应用代码,而无需修改业务逻辑函数。


包管理功能增强(2026年2月6日)

两项重大变更
1. 本地包存储
依赖项现在存储在项目根目录的zig-pkg文件夹中(与build.zig同级),建议将其加入.gitignore。全局缓存会额外保存压缩后的依赖副本,为未来P2P依赖分发做准备。

  1. --fork标志
    zig build --fork=[路径]允许临时覆盖依赖项为本地代码库,支持以下工作流:
    • 修复生态兼容性问题时直接修改依赖项代码
    • 通过上游仓库的测试套件验证改动
    • 选择提交补丁或保留本地修改

绕过Kernel32.dll(2026年2月3日)

策略:Zig标准库优先调用NT原生API(ntdll.dll)而非Win32 API(kernel32.dll),原因包括:
1. 随机数生成
- 原生API直接读取\\Device\\CNG设备,避免advapi32.dll的冗余加载和堆分配
2. 文件读写
- NtReadFile/NtWriteFile相比ReadFile/WriteFile
- 直接返回状态码而非通过GetLastError
- 支持APC例程实现更高效的异步I/O

相关issue:Windows: Prefer the Native API over Win32


Zig libc进展(2026年1月31日)

成果
- 已删除250个C源文件(剩余2032个)
- 通过Zig实现libc函数(如strnlen)带来以下优势:
- 减少第三方依赖
- 提升编译速度
- 支持ZCU(Zig编译单元)级别的代码优化
- 未来可能实现:
- 通过std.Io统一控制libc的I/O行为
- 对C代码启用资源泄漏检测

测试工具:感谢musl-libc的libc-test确保数学函数准确性。


(注:原文末尾的社会事件评论未予保留,以保持技术文档的聚焦性)

评论总结

总结评论内容:

  1. 对Zig语言未来的质疑(评论1、4)
  • "once Jai comes out, Zig will become obsolete"("一旦Jai发布,Zig就会过时")
  • "I just don't think I am going to see a 1.0 release in my lifetime"("我觉得我这辈子都看不到1.0版本发布")
  1. 对Zig积极改进的肯定(评论5)
  • "I am positive in Zigs effort to iterate & improve"("我对Zig的迭代改进持积极态度")
  • "If Zig can nail this down that would be fantastic"("如果Zig能解决这个问题就太棒了")
  1. 对当前实现状态的批评(评论6)
  • "this is news about two unfinished implementations"("这只是两个未完成实现的新闻")
  • "the interface stops being an interface"("接口已经不再是一个真正的接口")
  1. 技术细节讨论(评论2、3、7)
  • "based on userspace stack switching"("基于用户态栈切换")
  • "happy to see they stuck to GCD"("很高兴看到他们坚持使用GCD")
  • "I'm waiting for the kqueue implementation"("我在等待kqueue的实现")

不同观点保持平衡: - 消极观点主要关注Zig的稳定性问题和未来发展 - 积极观点肯定Zig的创新精神和解决特定技术问题的潜力 - 中立观点则聚焦具体技术实现细节和当前不足