Pasukan emulator terminal Ghostty telah menyelesaikan penulisan semula besar-besaran aplikasi GTK mereka untuk sistem Linux dan BSD, dengan sepenuhnya menggunakan sistem jenis GObject selepas bergelut dengan isu pengurusan memori dalam pelaksanaan sebelumnya. Ini menandakan kali kelima bahagian GUI ditulis semula dari awal, menyerlahkan cabaran mencipta aplikasi yang benar-benar asli platform.
Sejarah Penulisan Semula GUI:
- Pelaksanaan GLFW
- macOS dengan SwiftUI
- macOS dengan AppKit + SwiftUI
- Linux dengan GTK (pendekatan prosedural)
- Linux dengan GTK + sistem GObject penuh (semasa)
Masalah Pengurusan Memori Mendorong Penulisan Semula Sepenuhnya
Pelaksanaan GTK asal mengelakkan sistem jenis GObject, yang membawa kepada pepijat berterusan di mana sama ada memori yang diuruskan Zig atau memori yang diuruskan GTK akan dibebaskan secara salah. Ketidakpadanan jangka hayat ini mencipta seluruh kelas ranap yang melanda aplikasi. Pasukan mendapati bahawa melawan sistem pengiraan rujukan GTK daripada menerimanya adalah tidak produktif.
Pelaksanaan baharu membungkus struktur Zig seperti sistem konfigurasi dalam GObjects yang dikira rujukan. Ini membolehkan sistem pemberitahuan perubahan harta GTK mengendalikan kemas kini merentas aplikasi secara semula jadi, menghapuskan pengurusan memori manual yang kompleks yang sebelum ini menyebabkan ranap. Pemuatan semula konfigurasi, yang dahulunya merupakan proses intensif CPU dan terdedah kepada ralat, kini berfungsi dengan lancar melalui mekanisme terbina dalam GTK.
Ujian Valgrind Mendedahkan Keputusan Mengejutkan
Sepanjang proses penulisan semula, pasukan menjalankan setiap ciri melalui alat analisis memori Valgrind. Keputusan mencabar andaian biasa tentang keselamatan memori dalam bahasa pengaturcaraan yang berbeza. Pangkalan kod Zig menunjukkan kestabilan yang luar biasa dengan hanya satu kebocoran memori dan satu isu akses memori tidak ditakrifkan merentas pangkalan kod yang besar, kompleks, dan berbilang benang.
Pangkalan kod Zig kami mempunyai satu kebocoran dan satu akses memori tidak ditakrifkan. Itu benar-benar mengejutkan saya (dalam cara yang baik).
Semua isu memori lain yang ditemui semasa ujian berlaku di sempadan API C, terutamanya dalam pengurusan jangka hayat kompleks sistem GObject. Ini mengukuhkan realiti bahawa jaminan keselamatan memori sering rosak apabila melintasi sempadan bahasa, tanpa mengira ciri keselamatan bahasa sumber.
Keputusan Analisis Memori:
- Pangkalan kod Zig : 1 kebocoran memori, 1 akses memori tidak ditentukan
- Sempadan C API : Berpuluh-puluh isu dijumpai dan diperbaiki
- Sistem GTK/GObject : Pelbagai pepijat pengurusan jangka hayat diselesaikan
- Kaedah ujian: Analisis Valgrind pada setiap ciri dan PR
Komuniti Membahaskan Pendekatan Asli Platform
Penulisan semula telah mencetuskan perbincangan tentang peranan GTK dalam ekosistem Linux dan sama ada kerumitan itu wajar. Sesetengah pembangun mempersoalkan sama ada kerja integrasi yang meluas berbaloi untuk apa yang berjumlah tab dan menu konteks. Yang lain berhujah bahawa dominasi GTK dan janji ciri kebolehcapaian menjadikannya pilihan pragmatik untuk aplikasi Linux.
Perdebatan melangkaui pertimbangan teknikal kepada pertimbangan falsafah tentang reka bentuk antara muka pengguna. Walaupun sesetengah lebih suka pendekatan minimal seperti rendering OpenGL tersuai Kitty, misi Ghostty memberi tumpuan kepada integrasi asli platform yang terasa biasa kepada pengguna dalam persekitaran desktop pilihan mereka.
Sokongan Platform Ghostty:
- macOS: Aplikasi Swift dengan Xcode
- Linux/BSD: Aplikasi GTK dengan integrasi langsung X11/Wayland
- Teras: Perpustakaan Zig berkongsi dengan keserasian C ABI
- Frontend pihak ketiga: Disokong melalui libghostty (contohnya, Wraith untuk Wayland)
Memandang ke Hadapan
Aplikasi GTK yang ditulis semula akan dihantar sebagai lalai dalam versi Ghostty 1.2, tiba dalam minggu-minggu akan datang. Pasukan merancang untuk memanfaatkan integrasi GTK baharu mereka untuk kefungsian GUI yang diperluas, termasuk dialog keutamaan asli dan ciri integrasi platform yang lebih mendalam seperti penyegerakan konfigurasi automatik pada macOS.
Untuk pengguna yang lebih suka alternatif kepada GTK, teras libghostty modular membolehkan frontend pihak ketiga. Projek seperti Wraith sudah menunjukkan pelaksanaan asli Wayland yang memintas GTK sepenuhnya, menunjukkan bagaimana seni bina menyokong pendekatan berbeza untuk reka bentuk antara muka pengguna.