3 points par GN⁺ 2024-03-29 | 1 commentaires | Partager sur WhatsApp

Dioxus 0.5 : réécriture des signaux, suppression des durées de vie, hot reloading CSS, etc.

  • Chez Dioxus Labs, il existe une règle officieuse qui n’autorise qu’une seule réécriture par an.
  • Dioxus est une bibliothèque pour construire des interfaces GUI en Rust, qui a à l’origine commencé comme une réécriture de Yew.
  • Dioxus 0.5 évolue vers une direction plus simple, plus robuste et plus soignée, en réponse aux demandes de la communauté.

Nouvelles fonctionnalités

  • Réécriture complète de dioxus-core avec suppression de tout code unsafe.
  • Passage à une API basée sur Signal, sans clonage, sans utiliser use_state ni use_ref.
  • Suppression de toutes les durées de vie (lifetimes) et de l’état cx: Scope.
  • Introduction d’une fonction unique launch pour démarrer les applications sur toutes les plateformes.
  • Hot reloading des assets avec prise en charge de Tailwind et du CSS vanilla.
  • Réécriture du système d’événements permettant d’accéder aux types d’événements WebSys natifs de chaque plateforme.
  • Extension des composants pour ajouter des propriétés d’élément (par ex. Link accepte toutes les propriétés de <a/>).
  • Intégration unifiée des error boundaries ainsi que des server futures avec Suspense.
  • Vitesse de mise à jour du desktop multipliée par 5 et gestionnaires d’assets personnalisés pour le streaming d’octets.
  • Streaming des fonctions serveur et hot reloading full-stack.
  • Nombreuses améliorations de qualité de vie, corrections de bugs, etc.

Le problème des durées de vie

  • Toutes les durées de vie ont été supprimées pour rendre Dioxus plus simple.
  • Les problèmes de durées de vie intimident facilement les débutants en Rust et déconcertent aussi les développeurs Rust expérimentés.
  • Dioxus 0.5 supprime les durées de vie et Scope, et introduit les signaux comme solution de gestion d’état Copy.

Suppression des scopes et des durées de vie

  • Dans la nouvelle version, les scopes et la durée de vie 'bump sont supprimés.
  • La déclaration des composants et l’utilisation des fonctions d’exécution à l’intérieur des composants deviennent bien plus simples.

Suppression de tout le code unsafe

  • La suppression de la durée de vie 'bump et des scopes élimine une grande quantité de code unsafe.
  • dioxus-core 0.5 ne contient aucun code unsafe.

Signaux (Signals)

  • Introduction des signaux comme élément fondamental de l’état des composants.
  • Signal<T> est Copy, même si la valeur interne T ne l’est pas.
  • Les signaux offrent un système d’abonnement plus intelligent, de sorte que seuls les composants qui lisent un signal sont rerendus.

Hot reloading CSS

  • Prise en charge du hot reloading des fichiers CSS : la CLI dx surveille les fichiers et transmet immédiatement les mises à jour à l’application.

Réécriture du système d’événements

  • Dioxus 0.5 expose les types d’événements natifs de chaque plateforme et introduit des traits fournissant une API interplateforme.

Lancement cross-platform

  • La nouvelle API cross-platform permet de cibler facilement plusieurs plateformes avec une même application.

Système d’assets en bêta

  • Le nouveau système d’assets, manganis, est intégré à la CLI pour analyser, empaqueter et optimiser les assets de l’application.

Rendu desktop 5 fois plus rapide

  • Plusieurs optimisations ont été mises en œuvre pour améliorer les performances de rendu.

Extension des propriétés

  • Utile lorsqu’il faut fournir des fonctionnalités supplémentaires à des éléments spécifiques.

Raccourcis de propriétés

  • Il est possible d’utiliser une syntaxe abrégée pour transmettre des propriétés aux éléments et aux composants.

Fusion de propriétés sur plusieurs lignes

  • Ajout d’une fonctionnalité de fusion des propriétés pour faciliter la création de propriétés conditionnelles.

Streaming des fonctions serveur

  • Prise en charge du streaming de données des fonctions serveur vers le client.

Plateforme CLI full-stack

  • Il est possible de servir des applications full-stack avec la commande dx.

Prise en charge du routeur LiveView

  • Le routeur fonctionne immédiatement dans les applications LiveView.

Gestionnaires d’assets personnalisés

  • Sur desktop, la prise en charge de gestionnaires d’assets personnalisés permet de diffuser efficacement des données vers le navigateur.

Gestion native des fichiers

  • La prise en charge du glisser-déposer de fichiers fonctionne correctement sur desktop.

Gestion des erreurs

  • Les error boundaries et le trait throw facilitent la gestion des erreurs dans l’application.

Hot reloading activé par défaut et mode « développement » pour desktop

  • Le hot reloading est activé par défaut, ce qui améliore fortement l’expérience de développement des applications desktop.

Mise à jour des templates Dioxus

  • Miles, nouveau membre de l’équipe core, a profondément remanié la documentation et les templates.

Dioxus-Community et Dioxus-std

  • Dioxus Community a mis à jour d’importants crates de l’écosystème pour les aligner sur la sortie de la version 0.5.

Fonctionnalités à venir prochainement

  • Stabilisation et intégration du système d’assets, découpage de bundle pour .wasm, Islands et interactions reprenables, server components, outils développeur améliorés, refonte du mobile et du full-stack, etc.

Aperçu du retour de Dioxus-Blitz

  • Avec « Blitz 2.0 », l’intégration de Servo permettra un rendu natif via WGPU en utilisant le même moteur CSS que celui qui fait tourner Firefox.

Comment contribuer

  • Il est possible de contribuer en traduisant la documentation, en essayant des « good first issues », en améliorant la documentation, en contribuant à la CLI ou en répondant aux questions de la communauté sur Discord.

L’avis de GN⁺

  • Dioxus 0.5 constitue une mise à jour importante pour le développement d’interfaces GUI en Rust, en offrant aux développeurs un environnement de développement plus simple et plus sûr.
  • La suppression des durées de vie et des scopes réduit la complexité du développement en Rust, et l’API basée sur les signaux (Signal) simplifie davantage la gestion d’état.
  • Le hot reloading CSS et l’amélioration du système d’événements devraient contribuer à accroître la productivité en développement front-end.
  • Le hot reloading et les fonctionnalités de lancement cross-platform permettent aux développeurs de bénéficier d’une expérience cohérente sur différentes plateformes.
  • Ces changements devraient avoir un impact positif sur les communautés Rust et du développement web, en particulier pour celles et ceux qui développent des applications web et desktop avec Rust.

1 commentaires

 
GN⁺ 2024-03-29
Avis Hacker News
  • Expérience d’un premier utilisateur face aux changements de Dioxus 0.5

    • L’an dernier, il a créé un client Mastodon avec Dioxus ; l’expérience a été globalement bonne, mais il manquait encore beaucoup d’éléments.
    • Avec les changements de la version 0.5 de Dioxus, la plupart des complexités auxquelles les développeurs étaient confrontés ont été supprimées, en particulier la suppression des lifetimes et la résolution du problème des clonages incessants, ce qui laisse espérer une expérience de développement plus agréable.
    • Il n’a pas encore essayé la nouvelle version, mais félicite l’équipe pour ses efforts.
  • Question sur la prise en charge de SVG

    • L’utilisateur demande s’il est possible d’interagir avec des SVG, par exemple dessiner un sudoku en SVG et cliquer sur chaque case.
  • Curiosité à propos de la programmation Rust et question sur le fonctionnement du crate generational-box

    • Sans être programmeur Rust, l’utilisateur demande comment le crate generational-box conserve des valeurs sans copie, et si cela est sûr.
  • Expérience de développement de la page d’accueil de Freenet avec Dioxus

    • L’utilisateur développe avec Dioxus la page d’accueil distribuée de Freenet, le premier site web distribué que les gens verront lorsqu’ils configureront Freenet.
    • Il a une impression positive de la gestion d’état et de l’approche DSL de mapping du code vers le HTML, similaires à celles de Kweb, un framework web Kotlin.
  • Impression sur les facteurs de succès de React capturés par Dioxus et sur ses innovations

    • L’utilisateur est très enthousiaste à l’idée que Dioxus reprenne les éléments qui ont fait le succès de React tout en y ajoutant des innovations, avec un rythme de livraison très rapide.
    • Il félicite l’équipe et attend avec impatience d’essayer la fonctionnalité de signaux (signals) de cette version.
  • Avis sur RSX comparé à SwiftUI

    • L’utilisateur préférerait quelque chose de plus proche de SwiftUI que de RSX, et explique que React/JSX ne correspond pas à sa vision de ce à quoi devrait ressembler du code d’« UI réactive » en 2024.
    • Selon lui, SwiftUI n’est pas parfait, mais le code y est mieux organisé et compartimenté qu’avec React.
    • Il affirme que le principal avantage de JSX est de pouvoir réutiliser des bibliothèques existantes conçues pour le web, mais que RSX offre peu de « valeur transférable » en dehors du fait qu’il permet aux développeurs de transposer leurs connaissances conceptuelles de JSX vers RSX.
    • Il regrette l’absence d’un projet « SwiftUI but cross-platform » et mentionne Tokamak/TokamakUI, qu’il juge encore inachevé et apparemment moins actif.
  • Inquiétude concernant la suppression des lifetimes dans Dioxus

    • L’utilisateur se dit perplexe face à la solution adoptée par Dioxus pour supprimer les lifetimes et se demande quel impact cela a eu sur les performances.
  • Question sur l’intégration avec les Web Components

    • L’utilisateur explique avoir eu du mal à faire fonctionner correctement les composants Shoelace avec Yew, et aimerait retenter le projet avec un autre framework Rust.
  • Question sur la méthode de rendu des applications natives

    • L’utilisateur se demande si le rendu des applications natives par Dioxus se fait à l’intérieur d’une instance de navigateur.