Ghostty 1.4.0 出来了,7 个月、172 位贡献者、2889 个提交。这个版本最值得说的是一个先让人意外、再让人拍大腿的发现:macOS 内核把每一次 pty 读取都卡在 1 KiB 左右,不管你给多大的缓冲。
这一条直接解释了以前为什么慢——Ghostty 来一次读就处理一次,每读 1 KiB 就要付一次解析开销,而写输出的程序还得在这期间干等着。现在改了策略:尽量把 pty 抽干、攒成大块再统一喂给 VT 解析器。配合解析器本身的提速,纯 ASCII 文本的处理速度从 128 MB/s 提到 725 MB/s(5.7 倍),CJK 快了 3.4 倍,用 asciinema 那 2.6 GB 真实终端录像测也有约 25% 提升。
在 macOS 上 cat 一个 150 MB 的文本文件,从 1.5 秒降到 566 毫秒。resize 也快了——带 1 万行回滚的 120x80 终端,改窗口大小快约 6 倍,回滚里塞满 CJK 时快 3 到 5 倍。
内存那边也很实在。不可见的回滚缓冲区现在会被透明压缩,典型文本场景下物理内存占用降 70% 到 90%。省下来的空间换了个更爽的结果:每个终端的默认回滚上限从 10 MB 提到 50 MB,而压满的回滚历史通常比原来 10 MB 限制占的物理内存还少。压缩只在终端空闲时跑,滚动或搜索时按需解压,所以不影响 I/O 吞吐。

Kitty 图形协议这回补齐了最后两项功能:动画和相对定位。动画意味着 kitten icat 放的 GIF 会真的动起来,帧传输、合成、播放控制都支持,而且窗口不可见时会自动暂停。相对定位则让程序能把一张图精确定位到某段文本旁边。做完整套还被顺手做了性能优化——图片负载改用 SIMD 批量解析,不再一个字节一个字节啃,64 MiB 图像数据的解析快了约 16 倍。做到这一步,Ghostty(以及 libghostty)成了 Kitty 之外第一个 100% 覆盖该协议的终端。
平台层面两件大事。一是支持 macOS 27(Golden Gate),同时保持对 macOS 13 Ventura 及以上兼容。二是 GTK 版换了渲染管线,不再用 GtkGLArea,改为在独立线程上用 EGL 渲染、每帧导出 DMABUF 交给 GTK 显示,三缓冲大幅减少撕裂,主线程不再有 OpenGL 调用。最直观的收益是 分数缩放(125%、150%)下的文字终于不糊了——框线字符边缘清晰,这个问题上游 GTK 改过一次又复发,这次从根上按真实分数缩放比例渲染。
还有一个安全修复值得单独提:GHSA-4hwh-wx3w-3fqg。粘贴保护以前没把回车当行结束符,所以在不使用括号粘贴模式的程序里,一次粘贴可能直接执行命令、没有确认。这属于必须升级的理由。
另外补上了 Kitty 剪贴板协议(OSC 5522)——相比只能读写纯文本的 OSC 52,它能读写图片、HTML 这类任意格式,还支持粘贴事件告知格式。
对天天泡终端的人来说,1.4.0 是那种"升级完立刻能感觉到"的版本:滚动更顺、内存更省、图能动了、缩放不糊。一个小遗憾是 GTK 版的新渲染面需要系统 EGL 库,包维护者得跟着改;GPU 驱动不支持导出 DMABUF 时也能跑,但会退回到走 CPU 拷贝,慢一些。
参考来源