Hacker News 中文摘要

RSS订阅

Zig ELF链接器改进开发日志 -- Zig ELF Linker Improvements Devlog

文章摘要

这篇文章介绍了Zig编程语言在ELF链接器方面的改进进展。开发者Matthew Lugg详细说明了自0.16.0版本发布以来新ELF链接器的开发情况,包括现已支持构建自托管Zig编译器并启用LLVM和LLD库等重要功能。新链接器目前仍需通过特定参数启用,但已取得显著进展。

文章总结

以下是文章主要内容的重新陈述,保留了核心细节并删减了非关键信息:


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

5月30日:ELF 链接器改进

作者:Matthew Lugg
- 新 ELF 链接器(Zig 0.16.0 引入)已支持构建自托管的 Zig 编译器(含 LLVM/LLD 库)。
- 关键特性:支持快速增量编译(如修改代码后仅需 30ms 完成重建)。
- 当前限制:暂不支持生成 DWARF 调试信息。
- 用户可尝试通过 -fnew-linker 启用新链接器,并反馈问题。

5月26日:构建系统重构

作者:Andrew Kelley
- 构建系统拆分为配置器(configurer)和执行器(maker),提升性能:
1. 仅需重新编译用户逻辑(build.zig),而非整个构建系统。
2. 未变更配置时跳过冗余步骤。
3. 执行器启用优化编译。
- 示例:zig build --help 耗时从 150ms 降至 14ms。
- 破坏性变更:run_cmd.addArgs(args) 改为 run_cmd.addPassthruArgs()

4月8日:LLVM 增量编译支持

作者:Matthew Lugg
- LLVM 后端现支持增量编译,显著缩短错误检查时间(跳过耗时对象生成阶段)。
- 建议用户通过 -fincremental --watch 体验快速迭代开发。

3月10日:类型解析重设计

作者:Matthew Lugg
- 优化类型字段的惰性分析(避免未使用的类型触发编译错误)。
- 改进依赖循环错误提示(明确显示循环路径)。
- 增量编译性能提升,修复“过度分析”问题。

2月13日:io_uring 与 GCD I/O 实现

作者:Andrew Kelley
- 实验性支持 std.Io.Evented(基于协程的 I/O):
- Linux 使用 io_uring,macOS 使用 Grand Central Dispatch。
- 示例:相同应用代码可切换线程模型或事件驱动模型。
- 当前限制:性能未达预期,需进一步优化。

2月6日:包管理改进

  1. 本地依赖存储:依赖下载至项目目录 zig-pkg/,便于直接编辑和离线构建。
  2. 全局缓存压缩:减少存储占用,为未来 P2P 分发做准备。
  3. --fork 标志:临时替换依赖为本地路径(如测试修复分支),无需修改配置文件。

2月3日:绕过 Kernel32.dll

作者:Andrew Kelley
- 直接调用底层 ntdll.dll API 以提升性能:
- 示例1:熵生成绕过 advapi32.dll,避免首次调用延迟。
- 示例2:文件读写使用 NtReadFile,减少资源分配和错误处理开销。

1月31日:Zig 实现 libc

作者:Andrew Kelley
- 逐步用 Zig 代码替换第三方 libc 函数(已删除 250 个 C 文件)。
- 优势:提升编译速度、减少二进制体积、支持未来 I/O 统一调度(如集成 io_uring)。
- 测试工具:依赖 libc-test 确保数学函数准确性。


其他说明

  • 版本计划:Zig 0.17.0 即将发布,包含上述多项改进。
  • 用户反馈:鼓励测试开发版并报告问题,尤其是 libc 相关功能。

(注:政治相关内容未纳入技术摘要。)

评论总结

以下是评论内容的总结:

  1. 对Zig发展的积极评价
  • 认为Zig将成为C语言的替代品,兼具高性能和快速迭代优势
    • "Zig will become THE C replacement...iterate at the speed of JS or Python with performance of C or Rust" (bpavuk)
    • "This is the promise that blew my mind...So happy to see this become reality!" (teabee89)
  1. 技术特性讨论
  • 对增量链接与LTO优化的兼容性提出疑问
    • "any kind of incremental linking, is mutually exclusive with link-time optimization?" (derefr)
  • 关注跨平台支持情况
    • "Will the Windows side for 0.17.x get some compiler improvements as well?" (quikoa)
  1. 与其他语言的比较
  • 有用户将Zig视为Rust的潜在替代选择
    • "is this the new cool thing on the street? no more Rust?" (c0rruptbytes)
    • "glad I chose Zig as the target instead of Rust" (onlyrealcuzzo)
  • 与其他快速编译语言的比较
    • "Are there any other languages that offer similar compilation performance...Turbo Pascal" (ksec)
  1. 潜在应用场景
  • 作为其他语言后端的可能性
    • "porting the Raku backend...from C to Zig" (librasteve)
  • 作为语言转译目标的优势
    • "best build system design and was the best transpilation target" (onlyrealcuzzo)
  1. 社区反应
  • 对近期开发动力的猜测
    • "how much this work being pushed forward...is a response to the Bun drama" (bcardarella)
  • 对特定功能变更的遗憾
    • "still a little salty about @cImport removal" (bpavuk)