Rust ile Tamamen Yeniden Yazılan UI: Performans ve Güvenlik Avantajları
Rust ile Tamamen Yeniden Yazılan UI: Performans ve Güvenlik Avantajları
Bir UI projesini tamamen Rust ile yeniden yazmak, yalnızca kodun diliyle değişiklik yapmak değil, aynı zamanda uygulamanın yapısını, performansını ve güvenliğini de derinden etkileyen bir karardır. Git Cherry Tree projesinde bu yolculuk, eski teknolojilerle çalışırken karşılaşılan bazı sorunları çözmek ve daha güçlü bir temel oluşturmak amacıyla başlatıldı. Peki, Rust ile UI geliştirme, eski teknolojilerden neler kazanılıyor?
Neden Yeniden Yazılmalı?
Birçok geliştirici, özellikle yeni bir proje başlarken, mevcut teknolojilerle çalışmaktan memnuniyet duyar. Git Cherry Tree'de başlangıçta React ve Tauri ile UI geliştirilmişti. Ancak bu yaklaşım, zaman içinde bazı sorunlara yol açmaya başladı.
Öncelikle performans endişesi olabilir, ancak bu durum tam olarak öyle değildi. Geliştirici, 1 milyon satır boyutunda diff'leri 9 milisaniye içinde render edebildiğini belirtiyor. Yani web UI'nın "yavaş" olduğu iddiası, bu durumda geçerli değildi. Ancak, performansın yanı sıra, diğer sorunlar da birikmeye başladı.
İlk olarak IPC (Process Arası İletişim) sorunu ortaya çıktı. Tauri, uygulamanızı iki işlem halinde çalıştırmak zorunda bırakır: biri UI, diğeri backend. Bu yapı, veri transferi sırasında yüksek maliyetli bir işlem oluyor ve özellikle Windows'ta bu süreç oldukça yavaş oluyordu.
Ayrıca görsellerin düzgün gösterilmesi konusunda da sorunlar yaşanıyordu. IPC’nin etkisiyle birlikte, görsellerin zamanında ve sorunsuz bir şekilde gösterilmesi zorlaşıyordu. Bu, kullanıcı deneyimini olumsuz etkiliyordu.
Bir diğer sorun ise antivirüs yazılımlarının yanlış pozitif algılamasıydı. Uygulamanın bir "scam" olduğu düşünülmüş ve bu durum, uygulamanın güvenilirliğini sorgulamaya neden olmuştu. Bu sorun, özellikle "edge browser" kullanıldığı için, geliştiricinin kontrol altına alamadığı bir durumdu.
Son olarak, Linux platformunda büyük bir ikili dosya boyutu ile karşı karşıya kalındı. Tauri ile oluşturulan uygulama, 90 MB'lık bir boyuta ulaşıyordu ve bu, Windows'taki gibi "kurulum olmadan" gönderilebilir bir yapıya sahip değildi.
Bu sorunların hepsi tek başına önemli olmasa da, bir araya gelince ciddi bir kaygı kaynağı oluyordu. Bu yüzden, daha küçük bir yapı, daha hızlı bir iletişim ve daha güvenilir bir çözüm arayışı, Rust ile tamamen yeni bir UI yazmaya yol açtı.
Rust ile Geliştirme: Tek Bir Süreç, Çift Katmanlı Avantajlar
Rust ile geliştirilen yeni UI, ilk bakışta büyük bir değişim gibi görünse de, aslında aynı işlevleri yerine getiriyor. Geliştirici, her bir web UI özelliğini Rust ile eşdeğer şekilde yeniden oluşturdu ve hatta bazı yeni özellikler de ekledi.
Ancak bu dönüşüm, sadece kodun diliyle değil, aynı zamanda yapıyı da değiştiriyordu. Öncelikle, tek süreç yapısı sayesinde, uygulama artık birden fazla prosese ihtiyaç duymuyor. Bu, IPC maliyetini ortadan kaldırıyor ve veri aktarımı çok daha hızlı hale geliyor.
Bu durum, hem performans hem de kullanıcı deneyimi açısından büyük bir avantaj sağlıyor. Geliştirici, yük altında 3-6 milisaniye arasında bir frame zamanı elde etti. Bu, daha önce 9-10 milisaniye olan süreye göre önemli bir iyileşme.
Ancak bu performans kazancı, yalnızca Rust'ın doğrudan derlenmiş bir dil olmasıyla değil, aynı zamanda Iced kütüphanesinin kullanılmasıyla da sağlanıyor. Iced, Rust için gelişmiş bir UI kütüphanesi olmasına rağmen, bazı durumlarda yazım açısından oldukça uzun ve karmaşık olabiliyor. Bu nedenle, geliştirici, aynı fonksiyonları sağlamak için daha fazla satır kod yazmak zorunda kaldı.
Daha Az IPC, Daha Az Risk: Güvenlik ve Performansın Yolu
Geliştiricinin en büyük kaygılarından biri, antivirüs hataları ve ikili dosya büyüklüğüydi. Web UI ile çalışırken, uygulamanın bir tarayıcı tarafından başlatılması, birçok işlem ve sandbox kurulumu gerektiriyordu. Bu yapı, bazı antivirüs yazılımlarının "tehlikeli" olarak algılamasına neden oluyordu.
Rust ile geliştirilen yeni UI, bu sorunu gideriyor. Çünkü uygulama tek bir ikili dosya halinde çalışır ve tarayıcıya ihtiyaç duymaz. Bu, hem geliştirici hem de kullanıcı için daha güvenli bir ortam yaratıyor. Ayrıca, bu yapı sayesinde uygulama, kurulum olmadan doğrudan çalıştırılabilir hale geliyor.
İkili dosya boyutu ise, başta 15 MB'lık bir boyuta sahipken, geliştirme süreci boyunca arttı. Ancak geliştirici, bu boyutu azaltmak için birkaç adım attı: bağımlılıkları optimize etmek, bazı modülleri kaldırarak boyutu küçültmek, Cargo.toml dosyalarını yeniden düzenlemek ve kendi std kütüphanesini derlemek gibi yöntemlerle bu boyutu 15.3 MB'ya geri döndürdü.
Ancak bu, çok önemli bir nokta: panics'i abort olarak ayarlamak. Geliştirici, bu ayarı yapılmadı ve bu, uygulamanın daha da küçülmesine yardımcı olabilecek bir fırsatı kaçırdı. Ancak bu karar, gelecekte gerekli olabilecek hata ayıklama ihtiyaçları için tutarlılık sağlıyor.
Sonuç: Rust, Sadece Kodlama Değil, Bir Başlangıç
Rust ile tamamen yeniden yazılan bir UI, yalnızca daha hızlı ve daha küçük bir uygulama değil, aynı zamanda daha güvenli, daha tutarlı ve daha kontrol edilebilir bir yapı sunuyor. Web UI'lar, özellikle tarayıcılar sayesinde hızlı ve esnek olsa da, bu esneklik aynı zamanda sorunlara da neden olabiliyor.
Rust ile geliştirilen UI, bu sorunların çoğunu ortadan kaldırıyor. Tek süreç yapısı, IPC maliyetini sıfırlıyor, görsel ve performans sorunlarını çözüyor ve antivirüs hatalarını engelliyor. Ancak bu dönüşüm, sadece teknik bir geçiş değil, aynı zamanda geliştiricinin uygulama yapısına farklı bir bakış açısı kazandırıyor.
Yeni bir proje başlarken, eski teknolojilerle devam etmek kolay olabilir. Ancak zamanla ortaya çıkan sorunlar, geliştiricinin daha güçlü bir temel üzerine inşa etmeye karar vermesine neden olabilir. Rust, bu temeli oluşturmak için mükemmel bir araç. Çünkü sadece kodlama değil, aynı zamanda güvenilirlik, performans ve uzun vadeli bakım açısından da bir başlangıçtır.