Loading... # Zig 编程语言 zig libc 子项目取得重大进展 # 一、新闻概述 ## 1. 标题 Zig 发布 zig libc 子项目进展报告:250 个 C 源文件已删除 ## 2. 发布时间 2026 年 1 月 31 日 ## 3. 来源 Zig 官方开发日志 ## 4. 作者 Andrew Kelley(Zig 创始人) # 二、核心内容 ## 1. 事件摘要 ### A. 主要内容 Zig 编程语言团队宣布 zig libc 子项目取得显著进展,通过用 Zig 标准库封装替代 C 源代码的方式,已从 Zig 代码库中删除约 250 个 C 源文件。 ### B. 核心亮点 - 约 250 个 C 源文件已删除,剩余 2032 个 - zig libc 现在与 Zig 代码共享编译单元 - 编译速度提升,安装体积减小 - 静态链接 libc 的应用程序二进制体积减小 ## 2. 关键信息 ### A. 项目名称 zig libc subproject(zig libc 子项目) ### B. 重要数据 - 已删除 C 源文件:约 250 个 - 剩余 C 源文件:2032 个 - 删除进度:约 11% ### C. 涉及技术 - Zig 标准库 - libc(musl、mingw-w64、wasi-libc) - Zig Compilation Unit(ZCU) ## 3. 背景介绍 ### A. 前置背景 Zig 是一个现代系统级编程语言,旨在替代 C 语言。zig libc 子项目的目标是让 Zig 成为静态 libc 提供者,而不是依赖第三方 C 实现。 ### B. 相关上下文 该项目通过将 libc 函数重新实现为 Zig 标准库封装,逐步删除代码库中托管的 C 源文件,实现技术独立。 # 三、详细报道 ## 1. 主要内容 ### A. 技术原理 zig libc 的核心思想是增量删除冗余代码。通过将 libc 函数提供为 Zig 标准库封装,而不是托管的 C 源文件。 大多数情况下,这些函数是一对一映射,例如 memcpy 或 atan2,或者简单地封装一个通用函数,如 strnlen: ```zig fn strnlen(str: [*:0]const c_char, max: usize) callconv(.c) usize { return std.mem.findScalar(u8, @ptrCast(str[0..max]), 0) orelse max; } ``` ### B. 架构变化 ```mermaid graph TB subgraph 传统架构 A1[用户代码] --> A2[C 源文件<br/>约 2282 个文件] A2 --> A3[独立静态库] A3 --> A4[链接器] end subgraph zig libc 架构 B1[用户代码] --> B2[Zig 标准库封装] B2 --> B3[共享 ZCU] B3 --> B4[集成编译器] end A3 -.->|逐步迁移| B2 ```  ### C. 技术优势 每个完成迁移的函数都带来以下好处: - Zig 从第三方项目和 C 语言中获得独立性 - 编译速度提升 - Zig 安装体积简化并减小 - 静态链接 libc 的用户应用程序二进制体积减小 ## 2. 技术细节 ### A. 编译单元共享 最近的增强功能使 zig libc 与其他 Zig 代码共享 Zig Compilation Unit(ZCU),而不是作为稍后链接在一起的独立静态库。 ```mermaid graph LR subgraph 旧模式 A1[用户代码] --> A2[独立 ZCU] B1[libc] --> B2[独立 ZCU] A2 --> C[链接器] B2 --> C end subgraph 新模式 D1[用户代码] --> E[共享 ZCU] F1[libc] --> E E --> G[集成编译器] end ```  这是 Zig 拥有集成编译器和链接器的优势之一。当导出的 libc 函数共享 ZCU 时,冗余代码被消除,因为函数可以一起优化。这类似于在 libc 边界上启用 LTO(链接时优化),但它是在前端正确完成的,而不是在链接器中太晚完成。 ### B. I/O 控制潜力 当这项工作与最近的 std.Io 更改结合时,用户有可能无缝控制 libc 如何执行 I/O 操作。 例如: - 强制所有对 read 和 write 的调用参与 io_uring 事件循环 - 即使这些代码在编写时没有考虑到这样的用例 - 为第三方 C 代码启用资源泄露检测 目前这只是一个尚未实验的想法,但这个想法很有趣。 ### C. 测试验证 特别感谢 Szabolcs Nagy 提供的 libc-test 项目。该项目在确保不回归任何数学函数方面提供了巨大帮助。 # 四、影响分析 ## 1. 行业影响 ### A. 技术趋势 - Zig 正在逐步实现自举,减少对 C 生态的依赖 - 系统级编程语言的自主化趋势 ### B. 竞争格局 - 对比 Rust:Rust 仍依赖 liblibc 绑定 - 对比 C:Zig 提供更现代的开发体验 ## 2. 用户影响 ### A. 现有用户 - 编译速度提升 - 二进制体积减小 - 更好的跨平台一致性 ### B. 潜在用户 - 更有吸引力的 C 语言替代方案 - 更简洁的工具链 ### C. 迁移建议 Zig 团队提醒用户:由于 Zig 正在过渡成为静态 libc 提供者,如果遇到 Zig 提供的 musl、mingw-w64 或 wasi-libc libc 功能问题,请先在 Zig 中提交 bug 报告,以免因为 Zig 中的 bug 而打扰独立 libc 实现项目的维护者,因为这些代码不再由它们托管。 ## 3. 技术趋势 ### A. 技术方向 - 编程语言自举(self-hosting) - 减少对 C 语言的依赖 - 集成编译器和链接器的设计优势 ### B. 生态影响 - 更清晰的 ABI 稳定性 - 更好的跨平台支持 - 简化的工具链 # 五、各方反应 ## 1. 官方回应 Andrew Kelley 表示这是 Zig 走向技术独立的重要里程碑。 ## 2. 社区反馈 ### A. 积极评价 - 编译单元共享的优化方式得到认可 - 减少对 C 依赖的方向受到支持 ### B. 关注点 - 剩余 2032 个 C 文件的迁移工作量 - 兼容性保证 ## 3. 技术评价 - 集成编译器设计的前瞻性得到验证 - 前端优化的方式比传统 LTO 更高效 # 六、相关链接 ## 1. 官方资源 - zig libc 子项目 issue:https://codeberg.org/ziglang/zig/issues/30978 - ZCU 共享 PR:https://codeberg.org/ziglang/zig/pulls/31037 - std.Io 更改:https://codeberg.org/ziglang/zig/issues/30150 - 资源泄露检测:https://codeberg.org/ziglang/zig/pulls/30788 ## 2. 测试工具 - libc-test 项目:https://wiki.musl-libc.org/libc-test.html ## 3. 相关资源 - Zig 官方网站:https://ziglang.org/ - Zig 开发日志 RSS:https://ziglang.org/devlog/index.xml *** ## 参考资料 1. [Zig Devlog - January 31, 2026](https://ziglang.org/devlog/2026/#2026-01-31) 最后修改:2026 年 02 月 03 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏