图片

“当我们发布 1.0 时,它将是一个真正不妥协的匠心之作。”

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

一门编程语言,历经近十年开发,至今仍没有发布 1.0 正式版——按常理来说,这似乎意味着项目进展缓慢,甚至可能已经陷入停滞。

但 Zig 恰恰相反。

从 2016 年诞生至今,这门由 Andrew Kelley 发起的编程语言不仅没有消失,反而一步步走进主流开发者视野。终端模拟器 Ghostty、分布式数据库 TigerBeetle、Uber 的跨平台编译体系等项目都开始采用 Zig,它还连续多年跻身开发者最喜爱的编程语言行列。

为了打造 Zig,Andrew Kelley 甚至在 2018 年辞去技术工作,全职投入这项事业。八年时间里,他依靠约 67 万美元的社区资助和赞助维持项目运转,却始终拒绝仓促发布 1.0。

为什么一门已经被广泛采用的语言,宁愿等待十年也不愿宣布“正式完成”?为什么 Zig 选择离开 GitHub、限制 AI 参与社区开发?

近日,Zig 编程语言的发明者兼终身仁慈独裁者 Andrew Kelley 接受了工具供应商 JetBrains 的 Rust 生态系统负责人 Vitaly Bragilevsky 的采访,他深度分享了 Zig 十年发展的幕后故事,以及他对编程语言、开源软件和 AI 时代开发者生态的思考。

图片

以下为访谈内容:

图片

有 C、C++、Rust、Go 了,为什么还要再造一门编程语言?

Vitaly Bragilevsky:我们已经有了 C、C++、Rust、Go 这些语言,为什么你还是决定要再造一个 Zig 呢?

Andrew Kelley:你列出的这组语言恰好就是我在转向开发 Zig 之前,尝试用来构建数字音频工作站(DAW)的全部语言。

在转向开发 Zig 之前,我曾深度尝试过这些语言。在那个过程中,我发现每种语言都存在一些让我觉得难以逾越的问题。最终我得出结论:并不是我的水平有问题,而是编程语言本身有问题。

于是,我产生了创造一种新编程语言的“狂妄之心”,觉得自己可以做得更好,比 C++、Rust、Go、JavaScript 都要好。 

Vitaly Bragilevsky:具体遇到了什么问题?

Andrew Kelley:我最早尝试的是在浏览器里用 JavaScript 开发数字音频工作站。但很快我就发现,它的抽象层次太高了,我无法真正掌控底层硬件能力,也做不出那些让我觉得足够惊艳的用户体验。于是我放弃了 JavaScript,开始寻找原生编程语言。

接着我试用了 Go。最先遇到的问题是,它和 C 语言库的互操作性并不好。很多基础工作,比如创建窗口、按钮等图形界面组件,做起来都不够顺手。更关键的是,Go 的垃圾回收机制让我无法接受。音频处理对实时性要求极高,必须在严格规定的时间内完成计算。一旦超时,就会出现爆音、卡顿或者丢帧。在现场演出和直播软件这类场景中,这种情况是完全不可接受的。

后来我又尝试了 Rust,那还是在 Rust 1.0 正式发布之前。实际体验并不理想。我很难写出既符合 Rust 规则、又让我满意的代码。即便好不容易通过编译,稍微改动一点内容,也可能触发一连串新的编译错误,把开发节奏彻底打断。我记得当时光是处理字体渲染就折腾了一个月,最后却发现自己越来越深地陷进各种问题里,几乎无法推进项目,于是最终放弃了 Rust。

再后来,我转向了 C++。一开始感觉效率确实提高了不少,但很快新的问题又出现了。哪怕只是一个小小的拼写错误,或者一次不经意的疏忽,都可能导致内存损坏。而排查这类 Bug 往往需要花上几天甚至几周时间。这种开发体验让我越来越难以忍受。项目本身已经足够复杂,我不想再把大量时间浪费在这些低级错误上。

我甚至还尝试过采用更偏向 C 风格的 C++ 写法——用 C++ 编译器编译代码,但使用 C 链接器进行链接。这样做虽然能规避一些问题,但也意味着我只能使用模板等少数 C++ 特性。

然而根本问题始终没有解决:在 C++ 里,你实在太容易“搬起石头砸自己的脚”。

就在那个时候,我突然意识到,也许我可以做出一种更好的语言——比 C 更安全,比 Rust 更容易上手,比 Go 更适合系统编程,也比 JavaScript 和 D 更符合我的需求。

这大概就是 Zig 最初诞生时的那个想法,或者说,用我的话来讲,是一种“妄念”。

开发者“神装”补给站|CSDN 读者专属福利

立即领取 100 小时 GPU 算力

瑞幸咖啡/肯德基早餐/麦当劳套餐/下午茶等能量套餐任选其一

入群还可每月定期抽取旗舰显卡、AI PC 等极客神装

图片

领取地址:https://s.csdn.cn/4nPsOp

图片

Zig 有什么用?

Vitaly Bragilevsky:那么 Zig 现在的定位是什么?它解决了什么问题?

Andrew Kelley:当你想完全掌控计算机时,就会用到 Zig。你不希望浪费任何一点性能,追求极致的运行速度和内存利用率。最重要的是,你想为用户打造最出色的体验。

在启动 Zig 项目之前,我为自己设定了一个哲学:绝不在用户体验上妥协。

我不会因为使用了 Go 或 JavaScript 就说“由于语言限制,软件只能做到这种程度”。如果需要,我会改变整个工具链,甚至自己造一个,从而让计算机发挥出它本应具备的能力,为用户提供最好的体验。

Vitaly Bragilevsky:目前 Zig 有哪些实际应用?

Andrew Kelley:首先想到的是 Ghosty,这是一个由 Mitchell Hashimoto 开发的现代化终端模拟器,完全由 Zig 编写,代码质量非常高。

还有 TigerBeetle,这是一个分布式的金融事务数据库。他们通过批处理操作实现了在这个领域罕见的高效率。相比其他使用 PostgreSQL 或通用关系型数据库的方案,TigerBeetle 快了上千倍。它非常注重预分配资源,一旦运行起来就绝不会发生动态内存分配失败,这保证了其响应延迟非常稳定且可预测。

此外还有 Bun,这是一个高性能的 JavaScript 运行时。虽然它使用了 JavaScript Core 和大量的 C++ 库,但所有的胶水代码都是由 Zig 编写的。这个项目最近刚被 Anthropic 收购。

Vitaly Bragilevsky:我还听说 Uber 也在使用 Zig?

Andrew Kelley:是的,Uber 正在使用 Zig 的工具链。他们使用 zig cc 来为 ARM64 架构交叉编译他们的 Go 代码。

Go 语言虽然自带交叉编译,但一旦代码中涉及到 C 语言部分,Go 就无能为力了。在这种情况下,你可以直接把 Zig 当作 C 编译器来配合 Go 使用,从而实现无缝的交叉编译。

Vitaly Bragilevsky:顺便问一下,为什么叫 Zig?

Andrew Kelley:当时我想要一个简短的单词,随后就在 Google 里面搜索“Zig 编程语言”时是没有任何结果的。我写了一个简单的 Python 脚本来打印一些随机单词,当 Zig 出现时,它一下子吸引了我。

图片

发布十年,一直缺席的 Zig 1.0 版本

Vitaly Bragilevsky:Zig 已经位列开发者最喜爱的语言前五名了,但为什么诞生 10 年了还没有发布 1.0 版本?阻碍是什么?

Andrew Kelley:1.0 对不同项目意味着不同的标准。

Go 在发布 1.0 后很长时间没有触动语言核心。Rust 1.0 发布较早,但他们有“版本(Editions)”机制。对于 Zig 来说,1.0 意味着一个向后兼容的承诺,代表语言已经稳定,未来不会破坏现有代码。

Zig 软件基金会(ZSF)不是一家初创公司,我们没有投资压力,没有人在背后催促我们,我们也没有退出计划。我们是一家 501(c)(3) 非营利组织。我们不需要追求“快鱼吃慢鱼”或者急于变现,我们的目标是打磨一个伟大的项目并长期维护。我们有时间去稳步改进,而不必被迫接受那些为了赶进度而产生的错误决策。当我们发布 1.0 时,它将是一个真正不妥协的匠心之作。

Vitaly Bragilevsky:软件开发中有一个概念叫“更糟就是更好”(Worse is Better),即追求快速上线再修复,PHP 和 Go 都是这么成功的,而你却反其道而行之,为什么?

Andrew Kelley:我对“Worse is Better”这个说法有点反感,因为在语言逻辑上这个观点根本说不通。

我认为更准确的说法是“以简胜繁(Doing more with less)”。我们依然想提供强大的功能,但我们追求的是复杂性与效用之间的平衡点。例如在 Zig 的工具链中,通过一个简单的参数就能让编译器针对完全不同的操作系统和架构进行编译,这种高度的简洁带来了巨大的效用。

Vitaly Bragilevsky:你认为缺少 1.0 版本会影响公司的采用吗?

Andrew Kelley:我知道 1.0 的发布肯定会带来用户和企业采用率的激增。但我看重的是长远未来,我希望 Zig 成为未来五十年的通用语言。我们是一家精简、高效的小型组织,我们不急于求成。

图片

Zig 编程语言的生存之道

Vitaly Bragilevsky:聊聊基金会,2024 年你们的收入是 67 万美元,主要的资助者是谁?

Andrew Kelley:如果你看我们的财务报告,会发现我们的收入来源非常多元。很大一部分赞助来自个人捐赠者,此外还有各种各样的公司。我对此非常自豪,因为没有任何一个单一实体可以对我们说:“你必须按我说的做,否则我就撤资。”如果是那样,我们会直接拒绝并告诉他们,没有这笔钱我们依然能生存。这种健康的边界感让我们保持独立。

Vitaly Bragilevsky:赞助商能影响 Zig 的开发吗?

Andrew Kelley:他们对开发的影响力和普通人是一样的。他们可以参与 Bug 追踪,提交 Pull Request 或者在开发频道交流。大家在公平的基础上通过技术实力对话,没有所谓的“高优先级秘密通道”。

Vitaly Bragilevsky:你的年薪是 15.4 万美元,这仅相当于一个高级工程师的水平。作为整个语言生态的奠基人,你觉得这个薪资合理吗?

Andrew Kelley:这是由 Zig 软件基金会的董事会在第一次会议上决定的。当时参考了纽约市高级软件工程师的中位薪资水平。

坦白说,我感觉自己已经是中产阶级上层了,我能买得起房,付得起生活费,这让我已经很知足。对我来说,拥有一个精简高效、不被资本裹挟的非营利组织所带来的“自主权”,比更多的金钱要珍贵得多。它让我们更有韧性,甚至在去年整个科技行业大裁员的背景下,我们还能给外包开发者涨薪。

这种独立性让我们有底气说“1.0 还没准备好,再等等”。

Vitaly Bragilevsky:如果有大公司愿意出 1 亿美元买下 Zig 呢?

Andrew Kelley:1 亿美元确实很多,毕竟我们每年的总收入还不到 100 万美元,所以我当然会拿。但我不会接受任何导致团队盲目扩张的条件,我不想管理 100 人。目前我们只有一个员工,就是我,再加上 5 名全职外包。去年我们收入的 91% 都直接发给了这些开发者。我目前的管理上限大概是 10 个人,再多我就没动力也没精力了。如果真的收到了这笔钱,我会把它存进银行,确保项目在未来 100 年都不需要再融资,但我依然会保持小规模开发。

Vitaly Bragilevsky:你在 2022 年离开了 Reddit 和 Twitter,为什么?

Andrew Kelley:我觉得在这些网站上发帖正变得像以前在 Slashdot 或 Digg 上一样毫无意义。我们是软件工程师,希望尽可能减少所谓的“市场营销”。社交媒体上充斥着杠精和受算法控制的内容。相比之下,我们现在更愿意把精力投入到 Zig Day 这种线下活动和社区建设上,这比在社交媒体上浪费时间更有价值。

Vitaly Bragilevsky:2025 年末,你把 Zig 的主仓库从 GitHub 迁移到了 Codeberg,原因是什么?

Andrew Kelley:GitHub 对我们来说已经不好用了,我们的持续集成(CI)运行经常报错或停止工作。Codeberg 是一个总部位于德国的非营利、社区驱动的平台。作为一个程序员,我发现使用非营利组织的服务比使用大公司的服务要稳定得多。大公司总是在追求下一个季度的利润,而非营利组织的目标就是维持服务。这种稳定性正是我想要的。

Vitaly Bragilevsky:即使因此丢失了 GitHub 上的赞助商也无所谓吗?

Andrew Kelley:这是一个艰难的抉择,因为涉及资金风险。但我们的首要任务是写软件,如果 GitHub 的 CI 坏了,我们就必须找个能用的地方。事实证明,我们的支持者非常宽容且理解。

Vitaly Bragilevsky:你们也在脱离 LLVM?

Andrew Kelley:是的。我常拿 arcade 游戏《Killer Queen》举例,开发者用了 Unity 引擎,但由于引擎底层哪怕只有微小的变化,都会彻底改变职业选手的操作手感,甚至修个 Bug 都会引起社区抗议。核心产品如果依赖外部工具,是非常危险的。对 Zig 来说,LLVM 曾经像自行车的辅助轮。现在我写代码已经十年了,对编译器开发的了解远超当年,我可以把辅助轮拆掉了。

通过拥有自己的 x86 后端,我们实现了增量编译,即使是百万行级别的代码库,重新编译也只需要 50 毫秒或更短。这是 LLVM 永远无法做到的。

图片

Zig  严格禁止 AI 渗透

Vitaly Bragilevsky:Zig 为什么有着极其严格的“反 AI 政策”?

Andrew Kelley:首先,AI 生成的代码贡献基本上都是垃圾。它们不仅没有价值,甚至有负价值,因为它们耗费了我们核心团队极其有限的 Code Review 时间。我们现在积压了超过 200 个 PR 等待审核,如果有人发一个他们自己都不知道在写什么的 AI 代码,我们在评审几次后发现真相,那完全是在浪费生命。

更重要的一点是,开源贡献的核心意义在于“导师制”(Mentorship)。我们希望通过 Code Review 让贡献者成长,最终成为核心团队成员或更优秀的系统程序员。而发送 AI 生成代码的人并不学习任何东西,这完全背离了我们作为教育项目的初衷。我们宁愿要一个笨拙但愿意学习的人,也不要一个只会投喂 AI 的搬运工。

Vitaly Bragilevsky:但 Zig 代码库使用的是 MIT 协议,这意味着任何人都可以用你的代码去训练 AI,这和你禁止 AI 贡献是否矛盾?

Andrew Kelley:这不矛盾。我坚信 MIT 许可证那种“不附加任何条件”的精神。如果有人想用 Zig 训练 AI,请便。这反而说明 Zig 是有价值的。虽然我不喜欢这些大公司的某些做法,但这不影响我开源。我只是不允许这种低质量、不负责任的产出反过来污染我们的项目。

Vitaly Bragilevsky:有一种说法是 LLM 很难理解 Zig,因为它的语法比较独特?

Andrew Kelley:我没怎么试过,但我听说效果还可以。Mitchell Hashimoto 就在 Ghosty 项目中大量使用 AI 辅助。但我的标准是不妥协的完美,而不是“它好像能动了”。

Vitaly Bragilevsky:你在 Mastodon 上说“Vibe Coding”很无聊,像看餐馆评论而不是看大厨做菜。你对“生成式 AI 编程”怎么看?

Andrew Kelley:有些博客吹嘘用 AI 几分钟写个 App,那真的很没启发性。我对软件的追求是“极致的完美”,而不是“居然没出 Bug”这种低水准的惊喜。我希望看到的是一个人为了解决一个难题,去学习、去挣扎、去突破,那种人与计算机产生的共鸣是 AI 给不了的。

Vitaly Bragilevsky:你对编程的未来感到悲观吗?

Andrew Kelley:完全不会。人类永远不会停止编写代码,因为编程本身就很有趣。我最喜欢的 App 往往都是别人在业余时间纯粹为了爱好而开发的。商业公司的软件总是在试图卖给你东西,或者通过算法控制你,而爱好者开发的软件会尊重你,让你做计算机的主人。这种关系永远不会消失。

Vitaly Bragilevsky:你最钦佩的三个软件项目是什么?

Andrew Kelley:第一是 Linux,很难想象没有它的世界会多么糟糕。第二是 Blender,它作为一个开源项目,能和那些财大气粗的商业软件同台竞技并胜出,简直太伟大了。第三是 VLC,它的组织架构和长期稳定性非常值得学习,我有幸在大学时期还去巴黎参加过他们的活动。

Vitaly Bragilevsky:Zig 决定脱离 LLVM 自研后端,这听起来很大胆。

Andrew Kelley:LLVM 就像自行车的辅助轮。我已经研究编译器十年了,现在是时候摘掉它了。拥有自己的后端让我们实现了“增量编译”(Incremental Compilation),即使是百万行级别的代码库,修改后的重新编译也能缩短到 50 毫秒以内。这是 LLVM 永远无法做到的。

图片

C 语言会被取代吗?

Vitaly Bragilevsky:Zig 常被视为 C 的替代者。你觉得 C 真的能被取代吗?

Andrew Kelley:想要取代 C,你必须在 C 最擅长的领域击败它。Zig 没有放弃 C 所提供的任何底层能力,同时改进了它的弱点。在 Zig 里,你可以完成 C 能做的所有事情——从系统内核、嵌入式到 WebAssembly,而且 Zig 做得更好。它减少了“搬起石头砸脚”的机会,代码更易于调试。例如在 C 语言中,如果你遇到段错误,程序通常会瞬间退出,什么都不告诉你。但在 Zig 中,你会得到一个完整的调用栈追踪,告诉你错误发生的具体行数。

Vitaly Bragilevsky:那 Zig 和 Rust 的核心区别是什么?

Andrew Kelley:最核心的区别是类型系统。Zig 比 Rust 简单得多,因为它没有那种描述“什么类型可以传给什么函数”的元语言。

此外是内存管理。Rust 倾向于 RAII 和所有权模型,这在逻辑上更接近面向对象;而 Zig 选择将分配器(Allocator)显式化。在 Zig 中,你会思考“我希望 CPU 做什么”,然后写出对应的代码,这是一种更底层的思维方式。

Vitaly Bragilevsky:你认为 Zig 的“杀手锏”是什么?

Andrew Kelley:是工具链。Zig 没有任何系统依赖,你在任何电脑上运行 zig build,它就一定能工作。我们把编译器、链接器和构建系统统一在了一个工具里。

Vitaly Bragilevsky:有人抱怨 Zig 对“未使用的变量”报错太严格了,为什么不把它做成警告?

Andrew Kelley:这能捕捉大量 Bug。虽然初学者会觉得烦,但一旦你开始重构大规模代码,你就会感激这个设计。而且现在的编辑器(如 ZLS)都能自动帮你处理这些标记,所以这不再是负担,而是生产力。

图片

对开发者的建议以及未来畅想

Vitaly Bragilevsky:初学者应该如何学习 Zig?

Andrew Kelley:强烈推荐 Ziglings。这是一个非常棒的项目,你通过修复一个个故意出错的代码片段来学习语言特性。如果你想了解计算机底层是如何工作的,学 Zig 会让你受益匪浅,因为你在学习计算机的规则,而不仅仅是某种语言的规则。

Vitaly Bragilevsky:你是 Zig 的 BDFL(终身仁慈独裁者),这种模式有什么优劣?

Andrew Kelley:层级控制比委员会制度更简单、更高效。委员会倾向于妥协,而妥协往往会导致平庸的产品。独裁者模式能保持愿景的一致性。当然,我也在思考长期的可持续性,毕竟我不能永远干下去。

Vitaly Bragilevsky:你的个人开发配置是怎样的?

Andrew Kelley: 我的配置非常简单且传统:终端加 Vim。因为我经常对语言进行破坏性的重大改动,所以我需要一个足够稳健、不依赖复杂语言服务器的工具。Vim 非常可靠,即使我改了语法,我依然能编辑代码。当然,我要感谢 ZLS(Zig 语言服务器)团队,他们为社区提供了极佳的 IDE 支持。

Vitaly Bragilevsky:作为一名开发者或领导者,你经历过职业倦怠吗?

Andrew Kelley: 我认为职业倦怠发生在当你付出了巨大努力却看不到回报的时候。我很幸运,我热爱我的工作。每天醒来想到能改进 Zig,我都感到兴奋。即使有时候某些底层改动需要耗费半年时间去重写标准库,过程非常枯燥且辛苦,但当我最终发布版本,看到用户满意的反馈时,那种成就感会驱散所有的疲惫。

Vitaly Bragilevsky:除了编程,你还有什么爱好?

Andrew Kelley:我以前是个“码农宅男”,甚至在 OkCupid 工作期间还要利用周末加班搞 Zig。现在 Zig 成了全职工作,我终于有了业余时间。我跑了一场马拉松,在 21 英里处被一个 70 岁的大爷“超车”,我当时想:“天哪,他是怎么做到的?”这给了我很大的动力,以后我想尝试全程跑完。

另外,我正在学习日语,因为我非常喜欢日本动画,也很享受这种学习新语言挑战自我的过程。我每天会花一个小时学习,我的日语老师 Yuko 对我帮助很大。

Vitaly Bragilevsky:你认为 Zig 最终的成功是什么样子的?

Andrew Kelley: 我认为有两个层面的答案。从某种意义上说,我们已经成功了。我们实现了财务独立,拥有开心的用户群体,并保持着稳定的发布节奏,这种状态是可持续的。从另一个层面来说,我希望看到 Zig 的采用率能达到 Go 或 Rust 的水平。我希望计算机是为人类服务的,而 Zig 就是我送给世界的礼物,希望能让人们在与计算机相处时感受到这种尊重和掌控感。当我们最终发布 1.0 时,那将是一场不留遗憾的精彩演出。

Vitaly Bragilevsky:最后,如果回到 2015 年,你还会开始 Zig 这个项目吗?

Andrew Kelley:绝对会。辞掉工作全职开发 Zig 的那一天,是我人生中最棒的一天。我终于可以做自己的老板,这种成就感和独立性让我感到无比幸福。我不仅是在写代码,我是在为社会做贡献。我现在非常快乐。

来源:https://www.youtube.com/watch?v=iqddnwKF8HQ

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐