Ghostty Devlog 00210 hours agohttps://mitchellh.com/writing/ghostty-devlog-002Ghostty的非技术更新包括Mitchell Hashimoto的公开演讲以及社区为建立网站、Discord和测试候补名单所做的努力。Ghostty将是免费且开源的,很可能采用GPLv3许可证,测试版测试者将参与许可证的决策。macOS上的非原生全屏功能由Thorsten Ball实现,需要从SwiftUI切换到AppKit以管理窗口生命周期,从而改进了框架,为未来功能奠定了基础。Linux上的字体模糊和伪影问题被追溯到涉及浮点数转整数转换的填充计算错误,通过使用整数表示大小并对填充值进行向下取整来修复,确保像素完美渲染。这次错误修复引发了对代码库的审计,揭示了另一个舍入错误,并强调了使用适当的数据类型以防止抗锯齿问题。
Talk: Introducing Ghostty and Some Useful Zig Patterns10 hours agohttps://mitchellh.com/writing/ghostty-and-useful-zig-patternsGhostty 是一个用 Zig 编写的新终端模拟器,旨在结合速度、丰富功能以及原生平台集成。本次演讲重点介绍了 Ghostty 中使用的 Zig 模式,包括编译时接口、数据表和类型生成,以实现零成本抽象。Ghostty 目前处于封闭测试阶段,可访问源代码,计划于 2024 年以 GPL(可能)许可免费开源发布。在 macOS 上,Ghostty 使用 Swift 实现原生 UI(AppKit、SwiftUI),而 Linux 使用 GTK,核心逻辑用 Zig 编写。主要特性:快速渲染(压力测试下 480-500 FPS)、多种字体样式、分屏、真彩色、Kitty 图形协议以及原生错误消息。未来工作包括 GUI 设置、iCloud 同步、性能改进、内存优化、模糊测试以及扩大测试版计划。该项目旨在创新超越传统模拟器的终端功能,例如进度条、拖放以及安全特性。
Ghostty Devlog 00410 hours agohttps://mitchellh.com/writing/ghostty-devlog-004Ghostty的内测规模从30人扩大至约100人,由于稳定性提升,现在每次新增15-20名用户。在Linux(标题栏菜单、宽标签页、Wayland支持)和macOS(强制深色/浅色模式、非活动分屏淡出效果)上取得了显著的GUI进展,以实现原生平台体验。从TERM=xterm-ghostty向TERM=ghostty的过渡正在进行中;受阻于Vim的一个bug(硬编码终端列表)以及Go语言tcell库的上游问题,已提交社区修复。实现了XTGETTCAP,通过VT转义序列支持远程terminfo查询,利用Zig编译时生成实现快速、零分配的性能。新增对可变字体(如Inconsolata)的支持,可配置变化轴(如字重),这是终端模拟器中较为罕见的功能。
Ghostty Devlog 00510 hours agohttps://mitchellh.com/writing/ghostty-devlog-005Beta测试组在两个月内从100人增长到超过350人,这表明稳定性和功能完整性有所提升。Ghostty引入了终端检查器,帮助开发者调试基于文本的应用程序,其灵感来源于Firebug等网页检查器。亚洲语言输入(中文、日文、韩文)已修复,包括多码点建议、边缘情况以及中文字符对齐问题。Linux IME输入现在正常工作,只需通过少量代码差异即可集成GTK和Ghostty API。自定义着色器允许用户应用视觉效果,如CRT或辅助功能增强(例如针对色盲),而不会显著影响性能。Ghostty旨在尽可能匹配xterm的行为,并通过持续审计和文档改进来提高兼容性和修复错误。完成了超过100项错误修复和改进,近50位贡献者提交了代码,显示出强大的社区参与度。
Ghostty 1.0 is Coming10 hours agohttps://mitchellh.com/writing/ghostty-is-comingGhostty 1.0, 一款采用MIT许可证的开源终端模拟器,在经过了近两年、约2000名测试者的内测后,将于2024年12月正式发布。该项目旨在成为macOS和Linux上现有终端模拟器的最佳替代品,注重速度、功能丰富性以及平台原生GUI,无需在各方面做出妥协。主要特性包括:快速性能(通过如五分钟闪电演讲中提到的优化实现)、对xterm转义序列的广泛支持、现代规范(如样式下划线和Kitty键盘协议)以及原生GUI工具包(macOS原生和Linux上的GTK/libadwaita)。首个公开版本为1.0版,而非零版本(ZeroVer),这是因为经过了广泛的内测;此次发布出于家庭优先的考量以及对软件准备就绪即可发布的怀旧愿望。未来计划包括将libghostty作为独立库以促进生态发展(例如嵌入式终端、基于网页的终端),并扩展终端功能(如安全性、现代输入方法),但Ghostty 1.0不会提供稳定的libghostty API。该项目是一个非商业性的热爱项目,由创建者过去的成功资助,长期可持续性规划涉及非营利结构。
Ghostty: Reflecting on Reaching 1.010 hours agohttps://mitchellh.com/writing/ghostty-1-0-reflectionGhostty 1.0 发布;作者回顾项目历程。该项目最初是为了学习 Zig 和图形编程而启动,并未打算公开发布。内测版帮助管理了带宽和家庭时间,但也引发了炒作和挫败感。技术栈使用 Zig 构建核心,并采用平台特定的图形界面,事实证明这种做法是成功的。围绕 Ghostty 形成的社区对性能、设计和质量充满热情。1.0 之后的计划包括修复漏洞并发布独立的 libghostty 供其他项目使用。作者感谢内测社区、Discord 管理员以及妻子的支持。
Finding and Fixing Ghostty's Largest Memory Leak10 hours agohttps://mitchellh.com/writing/ghostty-memory-leak-fixGhostty 存在严重的内存泄漏,运行10天后内存使用量高达37 GB。该泄漏是由滚动修剪优化引起的,该优化在重用非标准页面时没有调整底层内存分配的大小,导致内存从未被释放。修复方案是在修剪过程中不再重用非标准页面,而是正确销毁它们,并从内存池中分配一个新的标准尺寸页面。该泄漏由 Claude Code 的命令行界面触发,该界面产生大量多码位字素输出,迫使 Ghostty 频繁使用非标准页面。该漏洞是通过 macOS 上的虚拟内存标签识别的,这使得将泄漏与 PageList 结构关联起来变得容易。Ghostty 使用 PageList 数据结构,其中标准页面使用内存池,非标准页面使用 mmap;泄漏发生是因为元数据错误地将大页面标记为标准页面。已添加了一个测试来重现该泄漏并防止未来回归。