写点什么

薪资天花板语言 Zig 出神作!HashiCorp 大神新作刷屏编程圈,Redis 之父直呼真香!

  • 2025-01-16
    北京
  • 本文字数:3851 字

    阅读完需:约 13 分钟

大小:1.79M时长:10:27
薪资天花板语言Zig出神作!HashiCorp大神新作刷屏编程圈,Redis之父直呼真香!

最近,一款用 Zig 编写的终端模拟器正式发布了 1.0 版本。

 

Ghostty 自上线以来便迅速引发广泛关注,不仅因为其创始人 Mitchell Hashimoto 的背景,更因其卓越的品质让长期沉寂的终端模拟器领域焕发新机。作为 HashiCorp 的联合创始人,Hashimoto 在打造公司标志性产品(如 Terraform、Vagrant、Packer 和 Nomad)中发挥了至关重要的作用。这些工具已成为全球 DevOps 专业人士的核心利器。

 


这款应用是免费开源软件,基于 MIT 许可证发布,旨在为大多数用户提供开箱即用的体验,无需额外配置。Ghostty 采用 Zig 编写,支持 GPU 加速,支持跨平台运行,发布时即可在 Mac 和 Linux 系统上使用。

 

在支持跨平台时,Ghostty 在 Linux 和 macOS 上都使用了各自平台的 GUI 构建,macOS 是基于 SwiftUI,而 Linux 是基于 Zig 和 GTK。

 



Redis 之父 antirez 也对 Ghostty 1.0 赞不绝口:“这将是一款改变游戏规则的工具。我刚在处理 Redis 的一些工作,输出了大量的调试信息和结果。通常情况下,终端会成为瓶颈,但这个工具却能在瞬间打印出 50 万条结果。而且,我还能在历史记录中快速回溯,性能丝毫没有下降。我太喜欢这个了!对于系统开发来说,这真的是一个巨大的提升。”

 


试用了 Ghostty 10 分钟,感觉 Emacs 可以退休了。

 

为什么选择 Zig 编程语言?

 

至于为什么选择 Zig 语言来编写,Mitchell Hashimoto 非常简单直接地说:“选择 Zig 就是因为我喜欢它!它的语言特性非常适合这个终端项目。”

 

Mitchell Hashimoto 早在 2021 年底或 2022 年初就对 Zig 表现出了浓厚的兴趣。当时,他在推特上分享了自己对这门语言的好奇,但由于繁忙的工作,一直未能深入研究。然而,Zig 一直在他的脑海中挥之不去。

 

“背景上来说,我曾是一名专业的 C 程序员,大概干了一到两年的时间。我喜欢底层系统开发,其实我也喜欢 C。实际上,HashiCorp 的所有软件差点就用 C 写了,当时是在 C 和 Go 之间抉择,最终 Go 赢了,但我们非常接近选用 C。我想重回系统编程领域,但我也清楚 C 的各种缺陷,所以一直在寻找一种‘更好的 C’。对我来说,Zig 从一开始就像是这样的语言。在使用 Zig 几年后,我的感受依然如初,甚至更好了。写 Zig 代码每天都让我感到愉悦…… 这就是关键。”

 

关于为何未选择 Rust,Mitchell Hashimoto 明确表示:“我对 Rust 的使用已有足够经验,也因此知道自己不想每天都写 Rust。从哲学和技术成就的角度而言,我对 Rust 非常敬佩,认为它极其出色。然而,从个人体验来看,这种感受却显得较为表面化。当我在编写或阅读 Rust 代码时,并未感受到乐趣。而对我来说,开发的过程应该是有趣的,写代码本身就是一种快乐……这完全是一种风格上的选择。”

 

与大多数其他编程语言不同,Zig 实现了与现有 C 代码的真正无缝互操作性。这样的兼容性极为重要。正如 Zig 软件基金会社区副总裁 Loris Cro 所解释的那样:“Zig 基本上对传统编程基础设施进行了彻底革新,打破了过去 40 年间无人敢触碰的诸多惯例。C 和 C++ 是久负盛名的编程语言,也是开发工作的核心语言,它们能够完全控制硬件。然而,这些语言的工具链却问题重重。”Zig 则允许用户继承这些核心语言的功能,同时提供与之兼容、更强大的工具链和完善的功能集。

 

同时,他还指出,Zig 也解决了传统 C/C++ 开发中面临的一个核心问题:跨平台编译的难题。举个例子,如果我们正在开发一款小型独立游戏,并希望将成果交付给 Mac 平台的用户,问题就来了。将游戏代码从 Windows 编译到 Mac 一直是个非常棘手的过程。但有了 Zig,无论是 Zig、C 还是 C++ 编写的代码,甚至是混合编写的代码,Zig 都能确保顺利进行跨平台编译,支持 macOS 或 Linux 平台,并且效果十分优秀。

 

Zig 是一门新兴编程语言,而 Ghostty 的爆火,也让它成为了 Zig 编程语言的代言人之一。

 


除 Ghostty 外,还有两家采用 Zig 的初创公司——Bun 与 Tiger Beetle,它们都对 Zig 寄予厚望。Bun 正在开发 Node.js 的同类竞争方案;而 Tiger Beetle 则希望构建一套分布式金融数据库,其高度依赖于对资源的精确控制。另外,Uber 也使用 Zig(并非作为主要语言)为 C 和 C++代码构建工具链,希望借此发挥 Zig 卓越的编译功能优势。

 

从设计理念上超越 C 和 Rust?

 

还值得一提的事情是,根据 2024 年的 Stack Overflow 调查,Zig 是该年度薪资最高的编程语言。这项调查涵盖了来自 185 个国家的 89,184 名软件开发人员,结果显示 Zig 开发人员的平均年薪达到 103,000 美元。Zig 因此也一炮而红、迅速吸引到更多开发者关注。

 


接受调查的开发人员中,只有 0.83%表示他们精通 Zig,这凸显了它在人才库中相对不为人知和稀缺性。

 

也许也正是因为这种稀缺性,再加上对高性能系统编程的不断增长的需求,可能导致了 Zig 开发人员的薪酬数字相当可观。

 

创始人 Andrew Kelley 对 Zig 的未来有着清晰的愿景:他希望 Zig 能成为 C 语言的接班人。

 

Andrew 深入研究了 C 语言的底层设计,发现许多我们习以为常的语言特性背后,其设计初衷并不总是最合理的。这种洞察促使他从根源上重新审视编程语言的设计。他认为,Zig 不应该仅仅是 C 语言的升级版,而应该是一门从底层逻辑上就与众不同的语言。

 

Andrew 提出了“全局最大化”的概念,即在设计语言时,要着眼于整体的最佳状态,而不是仅仅追求局部的优化。他认为,C 语言的一些设计选择虽然在当时看来是合理的,但从长远来看却限制了语言的发展。Zig 的目标是打破这些限制,构建一个更具可扩展性和适应性的编程语言。

 

为了实现这一目标,Zig 团队对 C 语言的许多传统概念进行了重新审视。例如,他们彻底摒弃了预处理器和宏,这些在 C 语言中被广泛使用的特性。这种看似激进的决定,实际上是为了让语言的设计更加简洁、一致。事实证明,它的内存分配机制不仅比 C 更加直观,甚至在性能上也有所超越。

 

Zig 的设计理念,无疑是对 C 语言的一场根本性变革。

 

Zig 设计方法的实际效果

Andrew 总是对编程语言背后的原理刨根问底。他不断挑战着 C 语言的一些根深蒂固的惯例,比如“为什么用 #define 而不用常量?”。许多程序员可能习惯了这么做,但很少有人去思考其中的缘由。Andrew 指出,这种设计其实是有问题的,因为在某些情况下,使用常量会触发编译错误,而这本不该发生。

 

在 Zig 中,他纠正了这些问题,“我们只是修复了问题,让该用常量的地方可以使用常量。就这么简单,这也是 Zig 的特色所在。”通过这样的设计理念,Andrew 发现通过修复 C 中不合逻辑的种种细节,预处理器完全可以被直接跳过。相反,Zig 选择使用条件编译。这也是 Zig 和 C 之间的关键差别:对于 Zig 来说,if 语句的条件在编译过程中是否已知才是重点。如果 if 语句的死分支中存在编译错误,则不会对其进行评估。

 

正因为如此,Zig 才能够放弃一部分 C 语言特性,但同时继续保持(甚至优化)可用性、安全性和运行速度。正是由于依托不同于以往的设计理念,Zig 的调整也带来了新的开发思路。

 

Zig 最初的诞生是为了“填补 C 语言的空白”,但随着项目的深入,它逐渐成长为一个功能更加强大、灵活的编程工具。尤其在内存管理方面,Zig 展现出了独特的优势。

 

这门语言采用不同于以往的内存分配方法:Zig 中没有全局分配器;相反,如果需要内存,则会传递自定义分配器,因此其能够在无法使用标准库的环境下正常起效,例如内核或者 arduino。

 

Zig 中的这种内存分配方法,旨在消除隐藏的内存分配机制。隐藏分配会以破坏直观性的方式干扰控制流与函数调用,导致开发人员很难在不加干预的前提下顺利复用现有代码。

 

Zig 内存分配器属于可选的标准库功能,而不再内置于语言本体当中。这些分配器可以定制,因此在桌面运行时使用可以 malloc(),而在内核上运行时则可使用标准库中的内核分配器,避免开发者重写 HashMap 数据结构。按照惯例,Zig 也拥有一个全局分配器。Andrew 呼吁开发者在所有单元测试中使用该分配器,这样如果存在内存漏洞,单元测试就能在代码发生实际内存泄漏之前及时报警。

速度与安全全都要

Zig 的性能比 C 还要强。这在一定程度上源自其面向数据设计方法,使得 Zig 编程性能得以增强,最终达成了在其他语言中无法实现的出色运行速度。

 

Zig 的创始人关于 CPU 缓存系统工作方式的模型非常直观:占用的内存越少,则 CPU 的处理压力就越小。根据这一观察,他专注于减少在 Zig 自托管编译器中创建对象时使用的内存量。如此一来编译器占用的内存更少,CPU 缓存的压力也随之下降,从而加快了代码运行速度——测试发现,Zig 的速度优势最高可达 35%。

 

Andrew 解释称,这样的优化程度在 Rust 等语言中根本不可能实现。Zig 性能提升的核心组件之一是其 untagged union。通过将标签存放在单独的数组之内,这样可以减少缓存压力。然而在 Rust 当中,如果不使用 untagged union,则会影响到代码安全性。

 

所以 Rust 的权衡在于:要编写速度更快的安全代码,就要牺牲掉充分利用计算机硬件的能力;而要想发挥硬件的全部性能,则须放弃一部分代码安全。Zig 与 Rust 的不同之处,就在于它全都要:用户既可以编写出运行速度更快的代码,也能通过对 untagged union 进行安全检查以保障安全。

 

Zig 在安全性方面采取了更加渐进的方法,由此回避必须符合“整体通用模式”所带来的安全设计陷阱。所以 Zig 创始人在创建 Zig 时做出的设计决策,使得该语言具备更高的性能与功能完备表现。

 

参考链接:

https://survey.stackoverflow.co/2023/#section-top-paying-technologies-top-paying-technologies

https://mitchellh.com/writing/ghostty-and-useful-zig-patterns

https://news.ycombinator.com/item?id=42517447

https://changelog.com/podcast/622

https://sourcegraph.com/podcast/andrew-kelley

 

2025-01-16 17:349306

评论

发布
暂无评论

IBM SPSS Statistics 26 for Mac(spss数据统计分析工具)v26.0.0.2中文永久激活版

理理

隆重推出 NGINX Gateway Fabric 1.0 版本

NGINX开源社区

nginx Kubernetes k8s nginx 开源版 NGINX Gateway Fabric

Tableau Desktop 2019 for mac破解补丁 苹果电脑最好用的数据分析工具

理理

aria2 for mac(全能的下载神器)v1.35激活版 及使用教程

理理

Filmographer Mac 非常好用的视频播放工具

理理

Sketch for mac(专业矢量绘图设计软件)v99.1中文激活版

理理

基于Joint BERT模型的意图识别技术实践

神州数码

MyBatis-plus这么好用,不允许还有人不会

JavaPub

springboot javapub 用户中心 Mybatis-Plus 王仕宇

Percona Toolkit 神器全攻略(监控类)

GreatSQL

AI基准测评(下):视频生成、代码能力、逻辑推理,AI是否已经超越人类?

可信AI进展

人工智能

专为 macOS 设计的系统监控工具 iStat Menus for mac中文版

理理

多机部署:打造内网服务器集群

左诗右码

Linux 运维

生成式推荐系统与京东联盟广告-综述与应用

京东零售技术

大模型 企业号2024年7月PK榜

微信伴侣WechatTweak for mac(微信防撤回、多开助手) v3.8.6中文集成版

理理

以Java项目为例,实现Jenkins对接CCE Autopilot集群

华为云开发者联盟

容器 云原生 华为云 华为云开发者联盟 企业号2024年7月PK榜

Xcode for Mac(开发工具)v14.3.1正式版

理理

「PAI-ArtLab100 AIGC」设计普惠计划发布!与 100+ 高校共同探索 AIGC 教育新路径

阿里云大数据AI技术

人工智能 阿里云 AIGC ArtLab

全新的KeyShot 2024 mac破解资源

理理

B站、小红书崩,原因竟然是...它

JavaPub

B站 javapub 服务器宕机

HiAI Foundation开发平台,加速端侧AI应用的智能革命

HarmonyOS SDK

HarmonyOS

VMware mac虚拟机安装Win10系统的详细教程

理理

Open Interpreter利用Code Interpreter实现本地化

神州数码

自然语言处理与Transformer模型:革新语言理解的新时代

天津汇柏科技有限公司

自然语言处理

服务端性能测试:行业流行性能监控工具介绍

测试人

软件测试 性能测试 自动化测试 测试开发

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

Baihai IDP

AI LLMs 企业号 7 月 PK 榜 rag 长上下文

Three-Body Technology Whisper of Loong for Mac(三体声音科技-龙之低语)

理理

薪资天花板语言Zig出神作!HashiCorp大神新作刷屏编程圈,Redis之父直呼真香!_编程语言_Tina_InfoQ精选文章