Hacker News 中文摘要

RSS订阅

Libghostty即将到来 -- Libghostty is coming

文章摘要

Mitchell Hashimoto宣布即将推出libghostty,这是一个可嵌入的终端模拟器库。首个组件libghostty-vt已开始成形,它提供解析终端序列和维护终端状态的API,无依赖且基于Ghostty核心代码。目前提供Zig API测试版,C API即将推出,但尚未达到正式使用标准。该库旨在解决众多程序重复实现终端模拟功能的问题。

文章总结

标题:Libghostty即将到来

在两年多前的一次关于Ghostty的公开演讲中,我首次提出了libghostty的构想:一个可嵌入的库,允许任何应用程序集成功能完整、现代化且快速的终端模拟器。如今,libghostty终于初具雏形,我很高兴能分享更多细节。

首个发布的库将是libghostty-vt:一个零依赖的库,提供解析终端序列和维护终端状态的API,其核心代码直接来自经过实践检验的Ghostty。它甚至不需要libc!

免责声明:本文主要介绍libghostty的开发路线图,并宣布其首个可交付组件。Zig API已可供测试,但C API尚未完成,将很快推出。两者目前均为早期测试版本,不建议用于生产环境。


为什么需要libghostty?

目前有数百个程序实现了某种形式的终端模拟。最明显的是通用终端模拟器如Ghostty、Kitty、iTerm2等,但终端多路复用器如tmux或zellij也是完整的终端模拟器。此外,编辑器(如JetBrains产品中的jediterm、VS Code的Xterm.js、Zed中的Alacritty)也嵌入了自己的终端模拟器。

许多网站和应用程序还实现了只读终端模拟功能,用于显示日志或命令输出。例如,GitHub Actions解析简单的颜色序列,而Vercel或Render等托管服务则实现了简单的终端模拟功能。

这些实现大多是临时解决方案,没有使用共享库或代码库。终端模拟看似简单,实则充满复杂性和边缘情况,导致大多数实现不完整、存在缺陷且性能低下。对大多数开发者来说,实现终端模拟是浪费时间,因为这不是他们的核心业务。

libghostty的目标是提供一个跨平台、依赖极少的C API库,让任何应用程序都能嵌入功能丰富、正确且快速的终端功能。


起点:libghostty-vt

libghostty-vt是libghostty的第一个库,专注于解析终端序列和维护终端状态(如光标位置、当前样式、文本换行等)。解析终端序列是终端模拟器的核心功能,无论是完整终端模拟器还是只读样式显示(如GitHub Actions或Vercel构建输出)都需要这一功能。

终端序列解析的状态图看似简单,但实现起来极具挑战性。例如,Jediterm曾因处理中间字符不正确,导致“更改光标形状”序列在JetBrains编辑器中吞掉一个字符。许多开发者为了支持“颜色功能”,仅解析简单的ANSI序列(如\e[31m),但样式序列远比这复杂,例如支持RGB格式。

libghostty-vt继承了Ghostty的所有优势:SIMD优化解析、出色的Unicode支持、高效内存使用、经过模糊测试和Valgrind测试的代码库,以及Kitty图形协议或Tmux控制模式等高级功能兼容性。

该库为零依赖设计(甚至不依赖libc),可轻松嵌入任何流行语言生态。初始目标平台为macOS和Linux(x86_64和aarch64架构),未来计划扩展到Windows、嵌入式设备和Web(通过WASM)。


长期规划

libghostty-vt只是开始。未来将提供更多库,如处理输入的libghostty-input、支持GPU渲染的libghostty-gpu,以及GTK组件和Swift框架等。这些库将作为系列发布,以最小化依赖和代码体积。


当前状态

libghostty-vt的Zig模块已合并,开发者可立即试用。C API正在开发中,将很快推出。Ghostty的macOS应用已使用内部C API,但新的C API将重新设计以满足更广泛的需求。

libghostty将与Ghostty应用分开版本管理,本文标志着公开测试阶段的开始。预计在未来6个月内发布首个正式版本。


寻求反馈

目前处于API设计的关键阶段,亟需开发者反馈。欢迎加入Ghostty Discord或通过邮件联系,共同参与早期开发。虽然API尚不稳定,但核心逻辑已通过Ghostty的实践验证。


未来展望

libghostty是Ghostty的下一个前沿领域,其影响力可能超越Ghostty应用本身。libghostty的广泛使用也将推动Ghostty应用的功能丰富性和稳定性。

👻

评论总结

评论摘要生成失败