Hacker News 中文摘要

RSS订阅

Show HN: Shitty – 快速终端。内存不安全,但比你的快 -- Show HN: Shitty – fast terminal. Memory-unsafe and faster than yours

文章摘要

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许可。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 项目名称争议:多数评论对“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. 性能表现:评论对性能数据表示认可,但存在不同看法。评论2指出“impressed with the perf numbers”,但认为其他终端(如alacritty、ghostty)差距不大;评论11用“Moby Dicks”比喻吞吐量,认为差异对实际使用影响有限;评论14更关注“keypress-to-screen latency”而非吞吐量。

  3. 技术实现:评论17赞赏使用Ragel生成状态机(“Excellent use of Ragel to generate fast state machines”),评论15质疑为何使用pthread而非std::thread。

  4. 许可证问题:评论16和22批评项目从GPL转向MIT的决策,认为基于衍生代码必须保留GPL(评论22:“100% derived work... has to preserve GPL license”)。

  5. 竞争与改进:评论9偏好Ghostty(“no this ‘Claude’ thing in its contributors”),评论24(Ghostty作者)建议重新基准测试,称其主分支性能已大幅提升。

平衡性总结: - 支持方:认可性能、技术实现和命名创意(评论1、6、10、17)。 - 反对方:批评命名不专业、许可证问题、性能优势有限(评论13、16、18、22)。 - 中立/建议:关注延迟而非吞吐量(评论14)、建议改进基准测试(评论24)、质疑内存安全性(评论23)。