Shitty: терминал с глупым именем и серьёзными амбициями
На Hacker News появился проект с намеренно провокационным названием — Shitty, «серьёзный эмулятор терминала с глупым именем». Слоган не менее вызывающий: «Молниеносно быстрый. Небезопасен по памяти и быстрее вашего». За шуткой скрывается вполне инженерная работа: это полная переработка терминала Zutty Тома Силадьи, от которого Shitty сохранил лишь родословную, заменив архитектуру, рендерер, интеграцию с платформой и стратегию тестирования.
Скорость
Автор приводит замеры на MacBook с процессором Apple: через каждый терминал прогонялось 100 МБ данных при одинаковых настройках шрифта, размера ячейки и сетки. На печатном ASCII Shitty показал ~118 МиБ/с, опередив alacritty (~99), kitty (~75) и ghostty (~64). На потоке случайных байтов — худшем случае для парсера с постоянно невалидным UTF-8 — отрыв ещё заметнее: ~51 МиБ/с против ~31 у alacritty и ~21 у ghostty. Kitty этот тест попросту «пропустил»: вместо отрисовки он реагировал на мусорные escape-последовательности сменой заголовка и звонками.
Что внутри
Состояние терминала держится на CPU, а ячейки рендерятся нативными вычислительными бэкендами: Vulkan на Linux и Metal на macOS. Разработчик упирает на надёжность: парсер представляет собой тотальный конечный автомат, а cat /dev/urandom здесь — не баг-репорт, а штатный бенчмарк. Тестовая база превышает 5000 проверок, собранных более чем из десятка чужих наборов — kitty, esctest, vttest, libvterm, konsole, mosh и других — и прогоняемых через настоящий PTY.
Отдельно отмечены корректная работа с Unicode (ячейка — это графемный кластер, а не кодовая точка), поддержка эмодзи, комбинирующих символов и двойной ширины, а также самодостаточность: шрифты вшиты в единственный небольшой бинарник, поэтому терминал запускается даже на машине вообще без установленных шрифтов. По умолчанию приложениям запрещено читать выделенный текст и управлять окном хоста — эти права нужно выдавать явно.
Лицензии и оговорки
Shitty написан на C++23 и собирается Clang. Проект переходит с унаследованной от Zutty лицензии GPL на MIT: новый код лицензируется двойным образом, но пока в дереве остаётся GPL-код, распространение сборки подчиняется GPL. Из ограничений автор честно называет отсутствие двунаправленного текста и графических протоколов вроде sixel.
Источник: Hacker News
Комментарии
Войдите, чтобы комментировать.