Dioxus 0.5: sinyallerin yeniden yazımı, lifetime'ların kaldırılması, CSS hot reloading ve daha fazlası
- Dioxus Labs'te yılda yalnızca bir yeniden yazıma izin veren gayriresmî bir kural var.
- Dioxus, Rust ile GUI oluşturmak için kullanılan bir kütüphane ve başlangıçta Yew'in yeniden yazımı olarak ortaya çıktı.
- Dioxus 0.5, topluluğun talepleri doğrultusunda daha basit, daha sağlam ve daha rafine bir yöne evrildi.
Yeni özellikler
dioxus-coreun tamamen yeniden yazılmasıyla tüm unsafe kod kaldırıldı.
use_state ve use_ref kullanmadan, kopyasız Signal tabanlı API'ye geçildi.
- Tüm lifetime'lar ve
cx: Scope durumu kaldırıldı.
- Tüm platformlarda uygulama başlatmak için tek bir
launch fonksiyonu eklendi.
- Tailwind ve Vanilla CSS destekli varlık hot reloading özelliği sunuldu.
- Etkinlik sisteminin yeniden yazılmasıyla her platformun yerel
WebSys etkinlik türlerine erişim mümkün oldu.
- Bileşen genişletme ile öğe nitelikleri eklenebiliyor (ör. Link artık tüm
<a/> niteliklerini alabiliyor).
- Birleşik error boundary'ler ile sunucu future'ları ve Suspense entegrasyonu eklendi.
- Masaüstünde uzlaştırma hızı 5 kat arttı ve bayt akışı için özel varlık işleyicileri eklendi.
- Sunucu fonksiyonu akışı ve tam yığın hot reloading desteği geldi.
- Çok sayıda QoL iyileştirmesi, hata düzeltmesi ve daha fazlası yapıldı.
Lifetime sorunu
- Dioxus'u daha basit hale getirmek için tüm lifetime'lar kaldırıldı.
- Lifetime sorunları Rust'a yeni başlayanları kolayca korkutuyor ve deneyimli Rust geliştiricileri için bile kafa karıştırıcı olabiliyor.
- Dioxus 0.5, lifetime'ları ve
Scopeu kaldırıp Copy durum yönetimi çözümü olan sinyalleri tanıtıyor.
Scope ve lifetime'ların kaldırılması
- Yeni sürümde scope'lar ve
'bump lifetime'ı kaldırıldı.
- Bileşen tanımlamak ve bileşen içindeki çalışma zamanı fonksiyonlarını kullanmak çok daha kolay hale geldi.
Tüm unsafe kodun kaldırılması
'bump lifetime'ı ve scope'ların kaldırılmasıyla çok miktarda unsafe kod temizlendi.
- dioxus-core 0.5 içinde unsafe kod bulunmuyor.
Sinyaller (Signals)
- Sinyaller, bileşenlerde temel durum yapı taşı olarak tanıtıldı.
Signal<T>, içindeki T değeri olmasa bile Copy özelliğine sahip.
- Sinyaller daha akıllı abonelik sağlar; böylece yalnızca sinyali okuyan bileşenler yeniden render edilir.
CSS hot reloading
- CSS dosyaları için hot reloading desteği geldi;
dx CLI dosyaları izliyor ve güncellemeleri uygulamaya anında akıtıyor.
Etkinlik sisteminin yeniden yazılması
- Dioxus 0.5, her platformun yerel etkinlik türlerini dışa açıyor ve platformlar arası API sağlayan trait'ler sunuyor.
Çapraz platform çıkışı
- Yeni çapraz platform API sayesinde aynı uygulamayla birden fazla platformu hedeflemek kolaylaşıyor.
Varlık sistemi beta
- Yeni varlık sistemi manganis, CLI ile entegre çalışarak uygulama içindeki varlıkları doğruluyor, paketliyor ve optimize ediyor.
Masaüstü render hızında 5 kat artış
- Render performansını artırmak için çeşitli optimizasyonlar uygulandı.
Nitelik genişletme
- Belirli öğelere ek işlev kazandırırken kullanışlı oluyor.
Nitelik kısaltma
- Nitelikleri öğelere ve bileşenlere aktarırken nitelik kısaltma sözdizimi kullanılabiliyor.
Çok satırlı nitelik birleştirme
- Koşullu nitelikleri kolayca oluşturabilmek için nitelik birleştirme özelliği eklendi.
Sunucu fonksiyonu akışı
- Sunucu fonksiyonlarının istemciye veri akıtabilmesi destekleniyor.
Full-stack CLI platformu
dx komutu kullanılarak full-stack uygulamalar sunulabiliyor.
LiveView router desteği
- LiveView uygulamalarında router doğrudan çalışıyor.
Özel varlık işleyicileri
- Masaüstünde özel varlık işleyicileri destekleniyor; böylece tarayıcıya veriler verimli biçimde akıtılabiliyor.
Yerel dosya işleme
- Masaüstünde dosya sürükleyip bırakma düzgün şekilde destekleniyor.
Hata işleme
- Error boundary'ler ve throw trait'i ile uygulamalarda hataları yönetmek kolaylaşıyor.
Varsayılan hot reloading ve masaüstü için "geliştirme" modu
- Hot reloading varsayılan olarak etkinleştirildi ve masaüstü uygulama geliştirme deneyimi büyük ölçüde iyileştirildi.
Dioxus şablon güncellemeleri
- Yeni çekirdek ekip üyesi Miles, belgeleri ve şablonları kapsamlı biçimde yeniledi.
Dioxus-Community ve Dioxus-std
- Dioxus Community, önemli ekosistem crate'lerini 0.5 sürümüne uygun olacak şekilde güncelledi.
Yakında gelecek özellikler
- Varlık sisteminin kararlı hale gelmesi ve entegrasyonu,
.wasm için bundle splitting, Islands ve devam ettirilebilir etkileşimler, sunucu bileşenleri, geliştirilmiş geliştirici araçları, mobil ve full-stack tarafında yeniden yapılanma gibi yenilikler yolda.
Dioxus-Blitz'in geri dönüşüne ön bakış
- "Blitz 2.0" ile Servo entegre edilerek WGPU üzerinden Firefox'u çalıştıran aynı CSS motoruyla yerel render alma mümkün olacak.
Nasıl katkı verilir
- Belge çevirisi, "good first issue" denemeleri, belgeleri iyileştirme, CLI'ye katkı, Discord topluluğunda soruları yanıtlama gibi alanlarda katkı sunulabilir.
GN⁺ görüşü
- Dioxus 0.5, Rust tabanlı GUI geliştirme için önemli bir güncelleme ve geliştiricilere daha kolay ve güvenli bir geliştirme ortamı sunuyor.
- Lifetime ve scope'ların kaldırılması, Rust geliştirmedeki karmaşıklığı azaltırken Signal tabanlı API durum yönetimini daha da basitleştiriyor.
- CSS hot reloading ve etkinlik sistemindeki iyileştirmeler, frontend geliştirmede üretkenliği artırmaya katkı sağlayacak.
- Hot reloading ve çapraz platform launch özellikleri, geliştiricilerin farklı platformlarda tutarlı bir geliştirme deneyimi yaşamasını sağlıyor.
- Bu değişimlerin Rust ve web geliştirme topluluğu üzerinde olumlu etki yaratması bekleniyor; özellikle Rust ile web ve masaüstü uygulamaları geliştirenler için faydalı olacak.
1 yorum
Hacker News görüşleri
Dioxus 0.5 sürümündeki değişikliklere dair ilk kullanıcının deneyimi
SVG desteği hakkında soru
Rust programlamaya duyulan merak ve
generational-boxcrate'inin nasıl çalıştığına dair sorugenerational-boxcrate'inin değerleri kopyalamadan nasıl tuttuğunu ve bunun güvenli olup olmadığını açıklayabilir misiniz?Dioxus ile Freenet ana sayfası geliştirme deneyimi
Dioxus'un React'in başarılı yönlerini yakalaması ve buna yenilik eklemesi hakkındaki değerlendirme
SwiftUI ile karşılaştırıldığında RSX hakkındaki görüş
Dioxus'ta lifetime'ların kaldırılmasıyla ilgili endişe
Web component'lerle entegrasyon hakkında soru
Native uygulama render etme yöntemi hakkında soru