Opublikowano wydanie emulatora terminala Ghostty 1.0.0, które wykorzystuje GPU do przyspieszenia renderowania treści. Projekt rozwija Mitchell Hashimoto, współzałożyciel firmy HashiCorp i twórca takich projektów jak Vagrant i Terraform. Autor Ghostty stara się wcielić w nowym emulatorze terminala trzy cechy — wysoką wydajność, rozbudowaną funkcjonalność oraz interfejs, który wygląda natywnie na każdej wspieranej platformie. Kod projektu jest napisany w języku Zig i jest udostępniany na licencji MIT. Gotowe kompilacje są przygotowane dla systemów Linux i macOS.
Do budowy interfejsu w kompilacjach dla Linuxa wykorzystano bibliotekę GTK, a dla macOS — framework SwiftUI, co pozwoliło na użycie natywnych dla każdej platformy dialogów, menu, interfejsu do zmiany ustawień oraz stylizacji okien. W celu przyspieszenia renderowania w Linuxie używany jest graficzny interfejs API OpenGL, a w macOS — Metal. Wydajność jest również zwiększana dzięki zastosowaniu osobnego wątku do operacji wejścia/wyjścia.
W przeprowadzonych testach Ghostty okazał się czterokrotnie szybszy od emulatorów terminala iTerm i Kitty, a dwa razy szybszy od Terminal.app, przy wyświetlaniu na ekranie zawartości dużego pliku, na przykład za pomocą polecenia „cat big_file.txt”. W porównaniu z Alacritty wydajność Ghostty była na podobnym poziomie, ale Alacritty ustępuje pod względem funkcjonalności.
W terminalu mogą być wyświetlane emoji, hiperłącza, złożone grafemy i ligatury (połączenie kilku symboli w jeden, na przykład „æ”). Do wyświetlania obrazów bezpośrednio w terminalu może być używany protokół Kitty. W celu zintegrowania funkcjonalności Ghostty z innymi aplikacjami rozwijana jest biblioteka libghostty, zgodna z projektami w języku C, pozwalająca na szybkie włączenie emulatora terminala do swoich produktów.
Interfejs obsługuje ciemne i jasne motywy wizualne, dzielenie okna na jednoczesne wyświetlanie kilku sesji oraz przełączanie między sesjami za pomocą kart. Terminal spełnia wymagania standardu ECMA-4, ale wspiera również rozszerzenia i sekwencje escape, które nie znalazły się w standardzie, na przykład proponowane w xterm.
Źródło: opennet.ru
