3 Punkte von GN⁺ 2024-03-29 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-03-29
Hacker-News-Kommentare
  • Erste Erfahrungen eines Nutzers mit den Änderungen in Dioxus 0.5

    • Im vergangenen Jahr hat der Nutzer mit Dioxus einen Mastodon-Client gebaut; insgesamt war es eine gute Erfahrung, allerdings fehlte noch einiges.
    • Durch die Änderungen in Dioxus 0.5 wurde der Großteil der Komplexität beseitigt, mit der Entwickler konfrontiert waren; insbesondere die Entfernung von Lifetimes und das Problem des ständigen Clonens wurden gelöst, sodass eine angenehmere Entwicklererfahrung zu erwarten ist.
    • Die neue Version wurde zwar noch nicht ausprobiert, aber dem Team werden Glückwünsche für die geleistete Arbeit ausgesprochen.
  • Frage zur SVG-Unterstützung

    • Der Nutzer fragt, ob man mit SVG interagieren kann, zum Beispiel ein Sudoku als SVG zeichnen und jede Zelle anklicken kann.
  • Neugier auf Rust-Programmierung und eine Frage zur Funktionsweise des Crates generational-box

    • Der Nutzer ist kein Rust-Programmierer, bittet aber um eine Erklärung, wie das Crate generational-box Werte ohne Kopieren beibehält und ob das sicher ist.
  • Erfahrungen bei der Entwicklung der Freenet-Homepage mit Dioxus

    • Der Nutzer entwickelt mit Dioxus die verteilte Homepage von Freenet, die Menschen als erste sehen werden, wenn sie Freenet einrichten.
    • Besonders positiv fällt die Ähnlichkeit zum Kotlin-Web-Framework Kweb auf, etwa bei der Zustandsverwaltung und dem DSL-Ansatz zur Abbildung von Code auf HTML.
  • Eindrücke von Dioxus' Erfolgsfaktoren aus React und seiner Innovationskraft

    • Der Nutzer ist sehr begeistert davon, dass Dioxus die Erfolgsfaktoren von React aufgreift, darauf aufbauend Innovationen hinzufügt und in sehr hohem Tempo Releases veröffentlicht.
    • Dem Team wird gratuliert, und der Nutzer freut sich darauf, die Signals-Funktion in diesem Release auszuprobieren.
  • Meinung zu RSX im Vergleich mit SwiftUI

    • Der Nutzer würde etwas bevorzugen, das näher an SwiftUI ist als an RSX, und äußert, dass React/JSX nicht seiner Vorstellung davon entspricht, wie Code für „reaktive UI“ im Jahr 2024 aussehen sollte.
    • SwiftUI ist zwar nicht perfekt, aber der Nutzer hat das Gefühl, dass der Code damit sauberer organisiert und besser gegliedert ist als bei der Verwendung von React.
    • Der Hauptvorteil von JSX besteht darin, bestehende Bibliotheken wiederzuverwenden, die für das Web gebaut wurden; bei RSX gebe es jedoch kaum einen „übertragbaren Wert“, abgesehen davon, dass Entwickler ihr konzeptionelles Wissen über JSX auf RSX übertragen können.
    • Der Nutzer bedauert, dass es kein Projekt im Stil von „SwiftUI, aber plattformübergreifend“ gibt, erwähnt Tokamak/TokamakUI, merkt jedoch an, dass es noch nicht fertig ist und die Aktivität offenbar nachgelassen hat.
  • Bedenken wegen der Entfernung von Lifetimes in Dioxus

    • Der Nutzer ist von der Lösung zur Entfernung von Lifetimes in Dioxus verwirrt und fragt sich, welche Auswirkungen das auf die Performance hatte.
  • Frage zur Integration mit Web Components

    • Der Nutzer hatte bei der Verwendung von Yew Schwierigkeiten, Shoelace-Komponenten zuverlässig zum Laufen zu bringen, und möchte das Projekt gern noch einmal mit einem anderen Rust-Framework versuchen.
  • Frage zur Rendering-Methode nativer Apps

    • Der Nutzer fragt sich, ob Dioxus native Apps innerhalb einer Browser-Instanz rendert.