写点什么

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

评论

发布
暂无评论

数字人民币如何影响传统支付?支付厂商数字人民币应用案例征集

易观分析

金融 数字人民币 传统支付

这份由腾讯技术大牛耗费几个月总结的1518页的Netty学习笔记GitHub获赞96.5K

了不起的程序猿

Java 后端 Netty JAVA开发 java程序员

小企业自动化运维管理用什么软件好?有便宜的吗?

行云管家

IT运维 行云管家 自动化运维 小企业

带你玩转“超大杯”ECS特性及实验踩坑

科技怪咖

跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

华为云开发者联盟

人工智能 图像处理 图像 三维

秒验丨使用简介与应用创建

MobTech袤博科技

android iOS SDK 秒验

ARMS助力羽如贸易打造全链路可观测最佳实践

阿里巴巴中间件

阿里云 云原生 可观测 Arms 客户案例

使用 HTML、CSS 和 JavaScript 的简单模拟时钟

海拥(haiyong.site)

开源 8月月更

火热与争议并行,XDR路在何方?

极盾科技

网络安全 安全 信息安全 数据安全 xdr

湖南省株洲市有等保测评机构吗?咨询电话多少?

行云管家

网络安全 等保测评 等级测评 株洲

基于DevCloud进行黑白棋实时对战游戏开发实践

科技怪咖

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

冉然学Java

Java MySQL 高可用 阿里 构架

Android进阶(十七)Android 布局

No Silver Bullet

android android布局 8月月更

SpringBoot进阶(叁):Spring Boot启动过程分析

No Silver Bullet

spring-boot 8月月更

Louvain算法在反作弊上的应用

百度Geek说

大数据 算法

重磅发布!阿里云全链路数据湖开发治理解决方案

阿里云大数据AI技术

大数据 阿里云 数据湖 数据分析

极盾·析策,XDR的正确打开方式

极盾科技

网络安全 安全 数据安全 xdr

企业实践|基于软件研运一体化DevOps平台的应用解析

云智慧AIOps社区

DevOps 自动化 敏捷开发 研发管理 代码托管

干货!XDR产品安全检测体系如何更好的落地?

极盾科技

网络安全 安全 信息安全 数据安全 xdr

CSDN 加入星策开源社区,携手推动企业智能化转型建设

星策开源社区

企业转型 智能化 CSDN

什么是IP 欺骗以及如何防范?

郑州埃文科技

网络安全 IP

MySql主从同步介绍

京东科技开发者

MySQL 数据库 主从同步

推荐 | 移动开发主流热更新技术

Speedoooo

小程序 APP开发 热更新

张宏江谈AI创业:人工智能亟需工程化,创业者大有可为

硬科技星球

技术分享| 应急指挥调度平台需要这些技术支撑

anyRTC开发者

音视频 快对讲 语音对讲 调度系统 视频对讲

传媒数字化转型思考:小程序是音视频内容的更优载体技术

Speedoooo

小程序 数字化转型 小程序生态 传媒

直播系统源码——重视哪些功能的开发?

开源直播系统源码

软件开发 直播系统源码 直播功能

程序员常用的IDE工具,你了解哪些?

Speedoooo

小程序 ide 开发者工具 前端开发工具

汉诺塔(递归+ 非递归版)

Five

算法题 8月月更

教你如何轻松实现多队伍排队管理【必看】

天天预约

微信小程序 排队 排队工具 #SaaS应用

用小程序打造超级App,助力社交电商扩大“留量池”

Speedoooo

小程序 社交电商 超级app 用户留存

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