Dioxus 0.5: Signal-Neuschreibung, Entfernung von Lifetimes, CSS-Hot-Reloading und mehr
- Bei Dioxus Labs gibt es eine inoffizielle Regel, pro Jahr nur eine Neuschreibung zuzulassen.
- Dioxus ist eine Bibliothek zum Erstellen von GUIs mit Rust und begann ursprünglich als Neuschreibung von Yew.
- Dioxus 0.5 wurde auf Wunsch der Community in Richtung mehr Einfachheit, Robustheit und Eleganz weiterentwickelt.
Neue Funktionen
- Vollständige Neuschreibung von
dioxus-core, wobei sämtlicher unsafe Code entfernt wurde.
- Umstellung auf eine
Signal-basierte API ohne Klonen und ohne Verwendung von use_state und use_ref.
- Entfernung aller Lifetimes und des Zustands
cx: Scope.
- Einführung einer einzigen
launch-Funktion zum Starten von Apps auf allen Plattformen.
- Asset-Hot-Reloading mit Unterstützung für Tailwind und Vanilla CSS.
- Neuschreibung des Event-Systems, wodurch Zugriff auf die nativen
WebSys-Event-Typen jeder Plattform möglich ist.
- Komponenten-Erweiterungen zum Hinzufügen von Element-Attributen (z. B. kann Link alle Attribute von
<a/> empfangen).
- Integrierte Error Boundaries sowie Integration von Server-Futures und Suspense.
- Fünffach höhere Desktop-Abgleichsgeschwindigkeit und benutzerdefinierte Asset-Handler für Byte-Streaming.
- Streaming von Server Functions und Full-Stack-Hot-Reloading.
- Viele QoL-Verbesserungen, Bugfixes und mehr.
Das Lifetime-Problem
- Um Dioxus einfacher zu machen, wurden alle Lifetimes entfernt.
- Lifetime-Probleme schrecken Rust-Einsteiger leicht ab und verwirren auch erfahrene Rust-Entwickler.
- Dioxus 0.5 entfernt Lifetimes und
Scope und führt Signale als Copy-basierte Lösung für das State-Management ein.
Entfernung von Scope und Lifetimes
- In der neuen Version wurden Scopes und die
'bump-Lifetime entfernt.
- Dadurch werden sowohl die Komponentendeklaration als auch die Nutzung von Runtime-Funktionen innerhalb von Komponenten deutlich einfacher.
Entfernung allen unsafe Codes
- Durch die Entfernung der
'bump-Lifetime und von Scopes wurde viel unsafe Code beseitigt.
- dioxus-core 0.5 enthält keinen unsafe Code.
Signale (Signals)
- Einführung von Signalen als zentrales Grundelement für den Komponentenstatus.
Signal<T> ist Copy, auch wenn der interne Wert T es nicht ist.
- Signale bieten intelligentere Subscriptions, sodass nur Komponenten neu gerendert werden, die das Signal lesen.
CSS-Hot-Reloading
- Unterstützung für Hot-Reloading von CSS-Dateien, wobei die
dx-CLI Dateien überwacht und Updates sofort in die App streamt.
Neuschreibung des Event-Systems
- Dioxus 0.5 legt die nativen Event-Typen jeder Plattform offen und führt Traits ein, die eine plattformübergreifende API bereitstellen.
Plattformübergreifender Start
- Mit der neuen plattformübergreifenden API lassen sich mit derselben Anwendung einfach mehrere Plattformen ansprechen.
Asset-System Beta
- Das neue Asset-System manganis ist in die CLI integriert und prüft, bündelt und optimiert Assets innerhalb der Anwendung.
Fünffach schnellere Desktop-Rendering-Geschwindigkeit
- Es wurden mehrere Optimierungen zur Verbesserung der Rendering-Geschwindigkeit umgesetzt.
Attribut-Erweiterung
- Nützlich, wenn bestimmten Elementen zusätzliche Funktionen gegeben werden sollen.
Attribut-Kurzschreibweise
- Beim Übergeben von Attributen an Elemente und Komponenten kann eine Kurzschreibweise für Attribute verwendet werden.
Zusammenführung mehrzeiliger Attribute
- Es wurde eine Funktion zum Zusammenführen von Attributen hinzugefügt, um bedingte Attribute einfach zu erstellen.
Streaming von Server Functions
- Server Functions können nun Daten an den Client streamen.
Full-Stack-CLI-Plattform
- Mit dem Befehl
dx lassen sich Full-Stack-Apps bereitstellen.
Unterstützung für LiveView-Router
- In LiveView-Apps funktioniert der Router sofort.
Benutzerdefinierte Asset-Handler
- Auf dem Desktop werden benutzerdefinierte Asset-Handler unterstützt, um Daten effizient an den Browser zu streamen.
Native Dateiverarbeitung
- Dateidrops werden auf dem Desktop korrekt unterstützt.
Fehlerbehandlung
- Mit Error Boundaries und dem Throw-Trait lassen sich Fehler in Apps einfach behandeln.
Standardmäßig Hot-Reloading und Modus „Entwicklung“ für Desktop
- Hot-Reloading ist standardmäßig aktiviert und verbessert die Entwicklungsumgebung für Desktop-Apps erheblich.
Aktualisierung der dioxus-Templates
- Das neue Kernteammitglied Miles hat die Dokumentation und Templates umfassend überarbeitet.
Dioxus-Community und Dioxus-std
- Die Dioxus Community hat wichtige Ökosystem-Crates für das 0.5-Release aktualisiert.
Bald erscheinende Funktionen
- Stabilisierung und Integration des Asset-Systems, Bundle-Splitting für
.wasm, Islands und wiederaufnehmbare Interaktionen, Server Components, verbesserte Developer Tools sowie Überarbeitungen für Mobile und Full-Stack.
Vorschau auf die Wiederbelebung von Dioxus-Blitz
- Mit „Blitz 2.0“ und der Integration von Servo wird natives Rendering mit WGPU möglich, unter Verwendung derselben CSS-Engine, mit der Firefox betrieben wird.
Wie man beitragen kann
- Beiträge sind möglich durch das Übersetzen der Dokumentation, das Bearbeiten von „good first issues“, die Verbesserung der Dokumentation, Beiträge zur CLI oder das Beantworten von Fragen in der Discord-Community.
Meinung von GN⁺
- Dioxus 0.5 ist ein wichtiges Update für die GUI-Entwicklung mit Rust und bietet Entwicklern eine einfachere und sicherere Entwicklungsumgebung.
- Die Entfernung von Lifetimes und Scopes reduziert die Komplexität der Rust-Entwicklung, und die
Signal-basierte API vereinfacht das State-Management weiter.
- CSS-Hot-Reloading und die Verbesserungen am Event-System werden zur Produktivität in der Frontend-Entwicklung beitragen.
- Hot-Reloading und die plattformübergreifende Launch-Funktion sorgen dafür, dass Entwickler auf verschiedenen Plattformen eine konsistente Entwicklungserfahrung erhalten.
- Es ist zu erwarten, dass diese Veränderungen die Rust- und Webentwicklungs-Community positiv beeinflussen werden, insbesondere für diejenigen, die mit Rust Web- und Desktop-Anwendungen entwickeln.
1 Kommentare
Hacker-News-Kommentare
Erste Erfahrungen eines Nutzers mit den Änderungen in Dioxus 0.5
Frage zur SVG-Unterstützung
Neugier auf Rust-Programmierung und eine Frage zur Funktionsweise des Crates
generational-boxgenerational-boxWerte ohne Kopieren beibehält und ob das sicher ist.Erfahrungen bei der Entwicklung der Freenet-Homepage mit Dioxus
Eindrücke von Dioxus' Erfolgsfaktoren aus React und seiner Innovationskraft
Meinung zu RSX im Vergleich mit SwiftUI
Bedenken wegen der Entfernung von Lifetimes in Dioxus
Frage zur Integration mit Web Components
Frage zur Rendering-Methode nativer Apps