文章摘要
Shitty是一款追求极致速度的终端模拟器,采用Vulkan和Metal原生计算后端,在Apple芯片MacBook上测试显示其吞吐量达118 MiB/s,远超Alacritty、Kitty等竞品。它通过了超过5000项终端兼容性测试,确保正确性。
文章总结
好的,这是根据您的要求,对原文进行中文重述后的版本:
Shitty 终端模拟器
Shitty 是一款追求极致速度的终端模拟器。它专为低延迟、快速启动和可预测的资源使用而设计。其核心架构将终端状态保持在CPU中,并利用原生计算后端(Linux上的Vulkan和macOS上的Metal)来渲染单元格。
性能表现
在Apple Silicon MacBook上的基准测试中,Shitty在处理100MB数据时表现出色。测试条件为:所有终端统一使用Menlo 12pt字体、14x28px单元格、80x24网格和500行回滚缓冲区。以下是三次运行中的最佳耗时:
可打印ASCII字符(滚动路径):
- Shitty: 耗时0.81秒,吞吐量约118 MiB/s
- Alacritty 0.17.0: 耗时0.96秒,吞吐量约99 MiB/s
- Kitty 0.48.2: 耗时1.28秒,吞吐量约75 MiB/s
- Ghostty 1.3.1: 耗时1.49秒,吞吐量约64 MiB/s
随机字节(解析器最坏情况,无效UTF-8):
- Shitty: 耗时1.88秒,吞吐量约51 MiB/s
- Alacritty 0.17.0: 耗时3.07秒,吞吐量约31 MiB/s
- Ghostty 1.3.1: 耗时4.63秒,吞吐量约21 MiB/s
- Kitty 0.48.2: 因对随机转义序列做出反应(如更改标题、响铃)而无法完成测试。
核心特性
- 正确性: 拥有超过5000项测试,这些测试来自Kitty、xterm、Alacritty等十余个测试套件,并通过真实的伪终端(PTY)进行黑盒驱动。
- 无闪烁: 调整窗口大小时,新帧的渲染与边界变化在同一事务中完成,更新由损坏区域驱动。
- 坚固性: 解析器状态机是完备的,并经过语料库模糊测试。
cat /dev/urandom在这里是一个性能基准测试,而非崩溃报告。 - Unicode 支持: 单元格基于字素簇(grapheme clusters)而非码点,正确处理表情符号序列、变体选择器、组合标记和宽CJK字符。
- 自包含: 单个小型二进制文件,不依赖窗口工具包,字体已嵌入,可在没有安装任何字体的机器上启动。
- 默认锁定: 除非明确允许,否则应用程序无法读取用户选择内容或控制主机窗口。
功能支持
- 支持VT52至VT5xx的控制码及广泛使用的xterm扩展。
- 主屏与备屏、主屏回滚、边距、标签页、矩形操作、保护单元格和同步输出。
- 终端宽度变化时,主屏回滚内容自动重排。
- 支持Unicode字素簇、组合字符、表情符号序列和双宽字符。
- 支持DEC单宽、双宽和双高行。
- 支持16色、256色和24位真彩色,包括下划线颜色和扩展下划线样式。
- 支持Legacy、modifyOtherKeys和Kitty键盘协议。
- 支持X10、VT200、UTF-8、SGR、SGR-pixel和urxvt鼠标协议。
- 支持线性和矩形选择、主选择、剪贴板集成、OSC 52策略和OSC 8超链接。
- 支持Shell集成、通知、进度报告和带内调整大小报告。
- 采用惰性字形光栅化、持久GPU字形缓存和由损坏区域驱动的计算渲染。
构建与运行
- 构建: 使用C++23编写,需Clang编译器。运行
./build即可构建默认安装组。 - 运行: 直接运行
./st启动默认Shell,或使用./st -e <命令>运行特定命令。可通过-geometry、-saveLines、-font等选项自定义终端尺寸、回滚行数和字体。 - 安装: macOS可通过Homebrew安装 (
brew install pg83/tap/shitty)。Linux可手动安装二进制文件和桌面文件。Nix用户可通过flake安装。
测试
运行 ./build test 可执行完整的原生和导入的兼容性测试套件。项目也提供了Nix命令来运行与GitHub CI相同的测试链,并生成代码覆盖率报告。
已知限制
目前不支持双向文本布局或Sixel等内联图形协议。部分历史DEC和xterm扩展不在支持范围内。
许可与作者
Shitty是Zutty的一个硬分叉和完全重写版本。原始Zutty终端模拟器由Tom Szilagyi创建。Shitty保留了这一血统,但替换了架构、渲染器、平台集成、测试策略和项目身份。项目正从GPL许可过渡到MIT许可。
评论总结
根据评论内容,总结如下:
主要观点与论据:
项目名称争议:多数评论对“shitty”名称持两极态度。支持者认为其幽默且易记(如评论1:“Unironically better name than ‘CRM’ for a CRM”),反对者批评其幼稚、不专业,可能阻碍企业采用(如评论13:“At best it's juvenile humor... going to make adoption within companies difficult”)。
性能表现:评论对性能数据表示认可,但存在不同看法。评论2指出“impressed with the perf numbers”,但认为其他终端(如alacritty、ghostty)差距不大;评论11用“Moby Dicks”比喻吞吐量,认为差异对实际使用影响有限;评论14更关注“keypress-to-screen latency”而非吞吐量。
技术实现:评论17赞赏使用Ragel生成状态机(“Excellent use of Ragel to generate fast state machines”),评论15质疑为何使用pthread而非std::thread。
许可证问题:评论16和22批评项目从GPL转向MIT的决策,认为基于衍生代码必须保留GPL(评论22:“100% derived work... has to preserve GPL license”)。
竞争与改进:评论9偏好Ghostty(“no this ‘Claude’ thing in its contributors”),评论24(Ghostty作者)建议重新基准测试,称其主分支性能已大幅提升。
平衡性总结: - 支持方:认可性能、技术实现和命名创意(评论1、6、10、17)。 - 反对方:批评命名不专业、许可证问题、性能优势有限(评论13、16、18、22)。 - 中立/建议:关注延迟而非吞吐量(评论14)、建议改进基准测试(评论24)、质疑内存安全性(评论23)。