Zig之旅
摘要
这篇博客文章回顾了参加Zigtoberfest的经历,并为使用Zig编程语言提供了分层建议,重点关注系统思维、设计深度和软件完美。
<p><a href="https://lobste.rs/s/5xxm0v/zig_journey">评论</a></p>
查看缓存全文
缓存时间: 2026/09/23 16:50
# Zig 之旅
来源:https://kristoff.it/blog/the-zig-journey/
几周前,我参加了在慕尼黑举办的 Zigtoberfest (https://zigtoberfest.de/),这是一场为期一天的会议。
我有幸在会议开始时做了一些开场介绍,我选择利用这段时间向听众分享一些关于如何将 Zig 作为一个项目和社区来学习的建议,这些建议分为三个层级,分别针对 Zig 的新手、中级用户和高级用户。
我不会在这篇博客文章中重复所有内容,但我想重点介绍我演讲的核心观点:Zig 之旅。
巧合的是,这篇文章也可能帮助回答一些人的问题,他们不太理解在 {Go, Rust, Modula-2, Mojo, LLMs, ...} 这些技术的映衬下,Zig 的意义究竟是什么。
## 1. 目标计算机,而非框架
对于新手,我的主要建议是学习如何将问题视为目标系统提供的一系列操作序列,而不是由提供更高级别(但有限且可能甚至浪费)API 的依赖组合构成。无论你在哪个生态系统中工作,包括 Web 开发,这都是一项极其有用的技能训练。
> 系统编程是建模软件开发的一种方式。它不是关于你正在处理的某一类事物,而是看待问题的一种方式。一位优秀的系统程序员能完全理解所涉及的系统。 - Andrew Kelley @ Systems Distributed ’23 (https://youtu.be/Qncdi-Fg0-I?si=5MlzI-Ml9kmbRre-)
**这并不是说你不应该使用依赖或框架,但如果你只会做这些,那就是个问题了。**
许多简单的应用程序通过粘合依赖来解决是最佳的,但如果你想尝试创造一些创新的东西,那么你就需要对程序的核心功能拥有完全的控制权,以便为用户提供真正新颖且经过深思熟虑的设计体验。
## 2. 深入设计代码行为
如果上一条建议是仔细审视应用程序的功能需求,那么现在给 Zig 中级用户的建议是:负责设计*其他所有方面*。
如果你的应用程序有一些重要的 C/C++ 依赖,用户需要自行安装它们,与你直接在 Zig 构建脚本中提供它们相比,区别是巨大的。
在前一种情况下,你的应用程序实际上依赖于包管理器(apt、brew、winget 等),并且每当包维护者改变打包方式(例如,版本或功能开关)时,它就会出问题。
这也是一些生态系统中过度使用容器的原因,而 Zig 使得通过简单的 `zig build` 命令就能实现“在所有系统上构建”的黄金标准成为可能。
为了帮助实现这一目标,我创建了 All Your Codebase (GH (https://github.com/allyourcodebase/),CB (https://codeberg.org/allyourcodebase/)),这是一个收集和共同维护 C/C++ 项目构建脚本的组织。
这只是深入设计代码行为的一个例子。其他例子包括提高效率、移除不必要的堆分配以及进行适当的模糊测试。
## 3. 让完美的软件成为现实
给 Zig 高级用户的建议很简单:找到一个你充满激情的项目,并将其完成。
在这个语境下,完美意味着你已经完全探索了你为应用程序设定的范围,你对提供给用户的核心功能拥有完全的所有权,并且不再有重要的非功能性改进需要你去做。
根据项目的规模,达到这个阶段可能需要多年的工作,但这最终是你赋予你在这段旅程中所有努力的意义。
## 总结
我刚才描述的并不是 Zig 独有的。
你可以(并且应该!)在其他生态系统中遵循同样的路径,但 Zig 既是一个工具链,也是一个社区,它旨在明确地帮助你在这段旅程中取得进步。虽然工具链和生态系统都尚未完全成熟,但根据你个人的敏感度和愿意成为早期采用者的意愿,Zig 可能已经是你成为一名更有影响力的软件工程师的最佳方式。
在“Hello Systems (https://www.youtube.com/watch?v=w9rkil0dotI)”中,我谈到了使用 Python 编写一个功能完整的静态网站生成器比使用像 Zig 这样的低级语言要困难得多。这是因为一旦你超越最表层的功能层(将 Markdown 转换为 HTML),Python 涉及的所有抽象使得精细调整并发和其他许多事情变得极其困难。
认为高级编程语言总是创建软件最简单的方式,这是相信了一个谬误,这反过来又导致了对依赖的过度依赖,并最终使你与机器实际所能做的事情的现实脱节。
学会深入理解系统不仅会提高你使用依赖的能力,还会提高你驾驭 LLM 的能力。乍一看这可能违反直觉,但这是一个显而易见的道理:如果你连什么都有可能做到(https://x.com/mitchellh/status/2060088112257372610)都不知道,你怎么能评估你从依赖或代理那里获得的东西的质量呢?
在 Zigtoberfest 的演讲结束时,我请听众举手,如果他们觉得自己的 Zig 之旅取得了良好进展。大约 100 人的全场几乎都自信地举起了手。
这对我来说是一个愉快的时刻,因为它表明我们(Andrew、核心团队、活动组织者等)的共同努力,正在使 Zig 软件基金会的使命成为现实。
如果你想与其他关心深化软件工程理解的人交流,加入你附近的 Zig Day (https://zig.day/) 活动或参加任何其他 Zig 活动(Software You Can Love Vancouver (https://softwareyoucanlove.ca/) 就在下个月!)。
最后,请考虑支持我们的非营利基金会 (https://ziglang.org/)。在当下这个时刻,传达关于自我提升的信息变得越来越困难,Zig 软件基金会依靠大众支持来保持独立、让 Zig 在不走捷径的情况下到达终点,并培育一个充满活力的全球社区。
相似文章
重返Zig
作者描述了从Zig到Rust再回到Zig的历程,探讨了编程语言中稳定性与表达力之间的权衡。
Zig 示例教程
通过带注释的示例,对 Zig 编程语言进行实践性介绍,涵盖从基础到高级的主题。灵感来源于 Go by Example。
Zig 示例
Zig by Example 是一本 Zig 编程语言的实践入门教程,包含针对版本 0.16 的带注释的示例程序。
从Rust转向Zig的感受
一位经验丰富的Rust开发者分享了通过重新实现JSONPath工具来学习Zig的旅程,重点介绍了IDE支持和代码组织方面的差异。
西雅图Zig日活动
西雅图Zig日是一个全天活动,专注于使用Zig编程语言进行协作学习和软件开发。