在编程语言的世界里,版本号1.0通常是一个神圣的里程碑。它向世界宣告:这个语言已经成熟、稳定,可以用于生产环境。然而,有一门备受瞩目的系统编程语言,却在1.0的门槛前徘徊了八年。它就是Zig——一个被Andrew Kelley从2018年全职投入开发,如今已驱动着Ghostty终端、TigerBeetle数据库,并被Uber用于跨平台编译的语言。目前又被Vercel拿来做最轻量的zero-native桌面应用。
在Stack Overflow的年度调查中,Zig稳居“最受钦佩的语言”前五名。但这样一门语言,至今仍未发布1.0版本。这究竟是开发迟缓,还是一场精心策划的“长期主义”实验?反观其他语言比如go在2009年官宣,在2012年正式发布了1.0,即使是rust这样工业级复杂度的语言也只用了5年发布1.0.
一、1.0的定义:一个被重新思考的里程碑
在大多数人的认知里,1.0意味着稳定、成熟和向后兼容的承诺。但Zig的创始人Andrew Kelley却一反常规,提出了一个更本质的见解:1.0本质上只是一个承诺——一个“未来的变更不会破坏你现有代码”的保证。仅此而已。
他指出,不同语言对这个里程碑的诠释天差地别。有些语言过早地锁定了特性,之后不敢轻易改变;有些语言虽然发布了1.0,但内部仍在剧烈演进,版本号变成了一个“兼容性的幌子”。比如python.
Zig选择了一条截然不同的路:与其急于许下承诺,不如先确保承诺本身值得信赖。
二、不是延迟,而是“战略性不发布”
促使Zig如此“淡定”的核心原因,在于其独特的项目根基。Zig并非由风险投资驱动,也不受企业季度财报的束缚。它由一个非营利基金会支持,依靠个人捐赠者维持,团队规模精干且独立。说白了就可以完全佛系开发,自然生长。
这种结构卸下了大多数项目身上那份沉重的“增长包袱”。Kelley不需要为了融资汇报而制造增长曲线,不需要为了市场宣传而强行发布一个“x.0”版本。因此,Zig的开发过程可以保持耐心,甚至在某些方面刻意放慢脚步。
这是一种“自由主义”的软件开发模式:为了长期正确,宁愿现在慢一点。代价是显著的——Kelley承认,一旦Zig发布1.0,其采用率很可能会跃升。但团队选择优先考虑“永不后悔的设计”,而非短期的繁荣。
三、核心拷问:如果今天锁定,我们将来会后悔什么?
Zig团队衡量进度的标尺,不是“我们离1.0有多近”,而是 “如果今天就把这些设计锁定,我们未来会后悔什么”。
这种提问方式将目标从“追求速度”转变为“追求设计的永恒性”。它要求开发者对每一个语言特性、每一个标准库函数、每一个编译选项进行极其严苛的审视:
- • 这个特性是否足够通用,能适应未来十年的计算范式?
- • 这个语法糖是否值得永久纳入语言规范?
- • 这种处理错误的方式,是否真的比其他所有可能的方式都更优秀?
正是这种拷问,让Zig在C和Rust之间找到了一条独特的路径——提供手动内存管理的能力,但摒弃了C宏的复杂性;提供强大的编译期元编程,但避免了C++模板的晦涩。
四、与C和Rust的“三国杀”
在Kelley的认知中,清晰地定位了Zig与两大竞争对手C和Rust的关系,这进一步解释了其谨慎的缘由:
- • 对抗C的“遗产”:Zig的目标不是彻底推翻C,而是成为“更好的C”。它解决了C中几十年来令人头疼的问题,如头文件的混乱、构建系统的碎片化、隐式类型转换带来的Bug。它希望无缝嵌入C生态,成为其现代化的替代者。
- • 区别于Rust的“安全策略”:Rust通过所有权和借用检查器提供编译期内存安全,这是一种“自上而下”的、带有强大约束力的方案。而Zig选择了另一条路:“无隐藏控制流”。它没有析构函数、没有运算符重载、没有异常。函数的行为仅由其代码和调用的其他函数决定。这种极致的简单性,使得代码行为极其可预测,也让跨平台交叉编译变得异常简单——这是Zig在Uber等公司获得青睐的关键。
从市场竞争的角度来看,Zig的“拖延”实则是一种极其高明的长期策略。在系统编程领域,C语言拥有50年的代码遗产,Rust凭借内存安全获得Mozilla等大厂背书。如果Zig急于发布1.0,它将以一个“尚未打磨完成”的形象,正面迎战这两个底蕴深厚的对手。
通过拉长1.0之前的周期,Zig正在做一件其他语言很少能做到的事:将“破坏性变更”的成本,从数百万用户身上,集中消化在核心团队内部。
对于Zig来说,1.0不是起跑的枪声,而是它认为自己已经可以在核心性能、易用性和正确性上同时击败C和Rust的“宣战时刻”。在此之前,所有的“慢”,都是为了积蓄足以一击制胜的力量。
其实Kelley本人可以说是一个完美主义者,为了不被C/C++等历史问题折磨,主动选择辞职,并说到,辞掉工作全职开发 Zig 的那一天,是我人生中最棒的一天"。更令人敬佩的是他8 年如一日,每天 12+ 小时写编译器。而且曾经还说过一句普通程序员难以企及的话:调试器是给那些不理解自己代码的人用的。用 Zig,你不需要调试器。
“1.0”之后,我们究竟在等待什么?
Zig的故事引发了一个超越编程语言的思考:当我们等待一个技术的“1.0”时,我们究竟在等待什么?
是等待一个永远不会破坏兼容性的完美承诺?还是等待一个证明其已足够成熟的生态系统?Zig给了我们一个新的答案:我们等待的,是开发者有足够的信心,做出“永不后悔”的承诺。
从这个意义上说,Zig迟迟不发布1.0,不是因为它还没准备好,而是因为它对自己将要许下的诺言,抱有极大的敬畏。
结语
Zig团队用八年的时间,诠释了什么叫做“长期主义设计”。他们用非营利、无投资压力的独立模式,支撑起一场关于编程语言根基的宏大实验。这场实验的最终产物,将不仅是一个版本号,而是一套经过千锤百炼、足以支撑未来几十年系统软件开发的可信基石。正如Kelley所言,Zig的目标是“用更少的东西做更多的事”——这本身就是一种在复杂世界中极其稀缺的、极具力量的设计哲学。