1 puan yazan GN⁺ 2025-08-16 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Ghostty ekibi GTK uygulamasını tamamen baştan yazdı ve GObject tür sistemini yoğun biçimde kullanmaya başladı
  • Bu süreçte Zig dili ile entegrasyon ve Valgrind ile bellek sorunlarının doğrulanması önemli rol oynadı
  • GObject sisteminin benimsenmesiyle önceye kıyasla bellek yönetimi ve özel widget geliştirme basitleşti
  • Valgrind kullanımının sonucunda Ghostty'nin bellek güvenliğinin büyük ölçüde iyileştiği görüldü
  • Yeni Ghostty GTK, kaynak koddan derlemelerde varsayılan hale geldi ve 1.2 sürümünde yer alacak

Giriş

  • Ghostty, macOS, Linux, FreeBSD destekleyen çapraz platform bir terminal emülatörüdür
  • Her platformda yerel GUI framework'lerini kullanarak farklılaşır
    • macOS: Swift ve Xcode tabanlı büyük ölçekli uygulama
    • Linux ve BSD: GTK tabanlı uygulama, X11/Wayland gibi sistemlerle doğrudan entegrasyon
    • Ortak çekirdek Zig ile yazılmıştır ve C ABI uyumlu API sunar
  • Mevcut yapıda GTK uygulamasının neden yeniden yazıldığına dair ayrıntılar için özgün PR'a bakılabilir
  • Bu yazı özellikle GObject tür sistemiyle entegrasyon ve Valgrind ile doğrulanan bellek sorunları üzerine odaklanır

GObject tür sistemi ve Zig

  • GTK kullanıldığında yapı gereği GObject tür sistemiyle arayüz kurmak gerekir
  • Geçmişte GObject sisteminden kaçınılarak referans sayımı olmayan Zig nesneleri ile GObject nesnelerinin yaşam döngüsü elle eşleştirilmeye çalışıldı, ancak bellek serbest bırakmanın düzgün çalışmaması sorunu tekrar tekrar ortaya çıktı
    • Örneğin Zig tarafındaki bellek serbest bırakılmışken GTK tarafındaki bellek yaşamaya devam ediyor ya da bunun tersi oluyordu
  • Bu yaklaşım yalnızca doğruluk sorunları yaratmakla kalmadı, aynı zamanda GTK'ye özgü özelliklerin (event signals, property binding, actions) kullanımını da zorlaştırdı
  • Somut bir örnek olarak, ayar (config) yapısı yeniden yüklendiğinde bağlı tüm GUI öğelerinin tutarlı şekilde güncellenmesi gerekiyordu; bu süreç karmaşık ve hataya açıktı
    • Artık Zig Config yapısı, onu saran referans sayımlı GhosttyConfig GObject ile yönetiliyor ve özellik değişikliği bildirimleri sayesinde değişiklikler uygulamanın geneline doğal biçimde yayılıyor
  • Özel GObject widget'ları oluşturmak da kolaylaştı; böylece Blueprint gibi modern GTK UI teknolojilerini kullanmak mümkün oldu
    • Son dönemde Blueprint'in devreye alınmasıyla GTK titlebar sekmeleri, animasyonlu zil çerçevesi gibi yeni özellikleri eklemek kolaylaştı

Valgrind, GTK ve Zig

  • Tüm geliştirme süreci boyunca Valgrind, bellek sızıntıları ve tanımsız bellek erişimleri gibi sorunları sistematik olarak doğrulamak için kullanıldı
  • GTK uygulamalarında Valgrind kullanmak zordur ve büyük boyutlu suppression dosyaları gerekir (yaklaşık %80'i GTK'nin kendisi, kalanı 3rd party kütüphaneler ve GPU sürücüleri içindir)
  • Tekrarlanan kontroller sayesinde yalnızca bazı durumlarda ortaya çıkan karmaşık bellek hataları önceden tespit edilebildi
    • Örneğin GObject WeakRef doğru başlatılmazsa hedef nesne daha sonra serbest bırakıldığında tanımsız bellek erişimi oluşur; bu durum Valgrind ile önceden yakalandı
  • Fiili deneyime göre, Zig kod tabanının içindeki sorunlar toplam yalnızca 2 adetti (1 sızıntı, 1 tanımsız erişim) ve bunlar da 3rd party C API entegrasyonu sırasında ortaya çıktı
    • Zig'in hata ayıklama amaçlı allocator'ü ve Valgrind entegrasyonu da işe yaradığını kanıtladı
  • Bulunan diğer bellek sorunlarının çoğu C API sınırlarında ve GObject sisteminin karmaşık yaşam döngüsü yönetiminden kaynaklandı
    • Sonuç olarak, karmaşık kütüphanelerin C API'lerini güvenli kullanmak için Valgrind benzeri araçlar gereklidir
  • Zig'in bellek güvenliğini destekleyen özelliklerinin etkisi yalnızca teorik tartışmalarla değil, somut proje deneyimiyle de doğrulandı

Sonuç

  • Bu, Ghostty'nin GUI bölümünü beşinci kez sıfırdan yeniden yapma deneyimi oldu
    • GLFW, macOS SwiftUI, macOS AppKit+SwiftUI, Linux GTK (prosedürel), Linux GTK+GObject tür sistemi sırasıyla
  • Tekrarlanan yeniden yazım sürecinde her seferinde yeni dersler ve teknik gelişim kazanıldı
    • Bu deneyimin bir kısmının macOS projesine de uygulanması planlanıyor
  • Ghostty GTK sisteminin bakım ekibinin aktif iş birliği de özellikle vurgulanıyor
  • Baştan yazılan yeni Ghostty GTK uygulaması artık kaynak koddan derlemelerin varsayılanı oldu ve 1.2 kararlı sürümünde yer alacak

Henüz yorum yok.

Henüz yorum yok.