开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

薪资天花板语言 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:349054

评论

发布
暂无评论

封神总结!12W字“多线程与高并发实战手册”成功助我涨薪19K

比伯

Java 程序员 架构

一次用户故事拆分分享

Bruce Talk

敏捷 Agile 用户故事 User Story

DAPP系统开发运营版,DAPP系统开发案例源码

系统开发咨询1357O98O718

ARST-日常打卡3

pjw

【网络】【操作系统】详解select、poll、epoll

Linux服务器开发

后端 网络编程 Linux服务器开发 网络io eopll

JVM-技术专题-虚拟机知识遗漏盘点

洛神灬殇

JVM

都在看的18WJava核心成长笔记 让我成功收获字节、阿里、腾讯大厂Offer!

学Java关注我

Java 编程 架构 架构师 程序人生】

Redis-Cluster集群

Sakura

4月日更

思维训练

Ryan Zheng

内容平台与热点挖掘思考

程序员架构进阶

28天写作 4月日更 领域思考 内容平台

Python OOP-2

若尘

面向对象 oop 面向对象编程 Python编程

ceph-csi源码分析(1)-组件介绍与部署yaml分析

良凯尔

Kubernetes 源码分析 Ceph CSI

ceph-csi源码分析(2)-组件启动参数分析

良凯尔

Kubernetes 源码分析 Ceph CSI

基于NIO高性能、可扩展网络应用库:xSocket

风翱

4月日更 xSocket

太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏

沐风

ansible

Golang 反射

escray

学习 极客时间 Go 语言 4月日更

HZFE 快报002 / 比特币7年来首次跌破50天均线

HZFEStudio

大前端 金融科技 科技互联网 资讯

产品训练营第三周作业

innovator琳

产品

微信读书又更新,吃灰已久的Pencil又能拿出来遛一遛了。

彭宏豪95

效率工具 读书 阅读 4月日更 微信读书

流量分析中常见的指标简单总结

五分钟学大数据

4月日更

高效获取信息的几点经验

彭宏豪95

效率 信息 阅读 4月日更

介绍一款能取代 Scrapy 的爬虫框架 - feapder

星安果

Python 爬虫 Scrapy feapder

如何利用 Google 开源工具 Ko 在 kubernetes 建并部署 Go 应用

公众号:云原生Serverless

Kubernetes 云原生

打通本地部署和公有云,混合云架构让“鱼”和“熊掌”兼得(一)

UCloud技术

混合云

iOS 面试策略之语言工具-Swift

iOSer

ios swift 面试

Web3.0时代需要什么样的企业级协作工具?

猫Buboo

Go 的 UTF-8 实现

Rayjun

utf-8 Go 语言

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

Java架构追梦

Java 阿里巴巴 架构 面试 金三银四

深入理解Spring框架之AOP子框架

邱学喆

aop 动态代理 cglib ProxyConfig AspectJ

关于读书的随想

小天同学

读书 4月日更

大数据-数据处理分类篇

进击的梦清

大数据 批处理 流式计算框架

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