3 puntos por GN⁺ 2024-03-29 | 1 comentarios | Compartir por WhatsApp

Dioxus 0.5: reescritura de signals, eliminación de lifetimes, hot reloading de CSS y más

  • En Dioxus Labs existe una regla no oficial que solo permite una reescritura por año.
  • Dioxus es una librería para construir GUI con Rust, que originalmente comenzó como una reescritura de Yew.
  • Dioxus 0.5 cambió hacia una dirección más simple, robusta y refinada en respuesta a las solicitudes de la comunidad.

Nuevas funciones

  • Reescritura completa de dioxus-core para eliminar todo el código unsafe.
  • Transición a una API basada en Signal sin copias y sin usar use_state ni use_ref.
  • Eliminación de todos los lifetimes y del estado cx: Scope.
  • Introducción de una única función launch para iniciar apps en todas las plataformas.
  • Hot reloading de recursos con soporte para Tailwind y Vanilla CSS.
  • Reescritura de eventos para acceder a los tipos de eventos nativos WebSys de cada plataforma.
  • Extensión de componentes para agregar atributos de elementos (por ejemplo, Link recibe todos los atributos de <a/>).
  • Integración de error boundaries unificados y de server futures con Suspense.
  • Mejora de 5 veces en la velocidad de reconciliación en escritorio y handlers de recursos personalizados para streaming de bytes.
  • Streaming de server functions y hot reloading full-stack.
  • Muchas mejoras de calidad de vida, correcciones de errores y más.

El problema de los lifetimes

  • Para hacer Dioxus más simple, se eliminaron todos los lifetimes.
  • Los problemas con lifetimes suelen intimidar fácilmente a principiantes de Rust y también confunden a desarrolladores experimentados.
  • Dioxus 0.5 elimina lifetimes y Scope, e introduce signals como solución de manejo de estado con Copy.

Eliminación de scopes y lifetimes

  • En la nueva versión se eliminaron los scopes y el lifetime 'bump.
  • Declarar componentes y usar funciones de runtime dentro de ellos ahora es mucho más fácil.

Eliminación de todo el código unsafe

  • Al eliminar el lifetime 'bump y los scopes, también se eliminó mucho código unsafe.
  • dioxus-core 0.5 no tiene código unsafe.

Signals

  • Se introducen los signals como pieza base del estado principal de los componentes.
  • Signal<T> es Copy incluso si el valor interno T no lo es.
  • Los signals ofrecen suscripciones más inteligentes, de modo que solo se vuelven a renderizar los componentes que los leen.

Hot reloading de CSS

  • Soporte para hot reloading de archivos CSS, donde el CLI dx observa los archivos y transmite las actualizaciones a la app al instante.

Reescritura del sistema de eventos

  • Dioxus 0.5 expone los tipos de eventos nativos de cada plataforma e introduce traits que ofrecen una API entre plataformas.

Lanzamiento multiplataforma

  • La nueva API multiplataforma permite apuntar fácilmente a varias plataformas con la misma aplicación.

Sistema de recursos en beta

  • El nuevo sistema de recursos, manganis, se integra con el CLI para verificar, empaquetar y optimizar los recursos dentro de la aplicación.

Renderizado de escritorio 5 veces más rápido

  • Se implementaron varias optimizaciones para mejorar la velocidad de renderizado.

Extensión de atributos

  • Es útil al proporcionar funcionalidades adicionales a elementos específicos.

Abreviación de atributos

  • Se puede usar sintaxis abreviada de atributos al pasar atributos a elementos y componentes.

Fusión de atributos en varias líneas

  • Se agregó una función de fusión de atributos para facilitar la creación de atributos condicionales.

Streaming de server functions

  • Se permite que las server functions transmitan datos al cliente.

Plataforma CLI full-stack

  • Se pueden servir apps full-stack usando el comando dx.

Soporte para router en LiveView

  • El router funciona de inmediato en apps LiveView.

Handlers de recursos personalizados

  • En escritorio se admiten handlers de recursos personalizados para transmitir datos al navegador de forma eficiente.

Manejo nativo de archivos

  • En escritorio ahora se admite correctamente el arrastre de archivos.

Manejo de errores

  • Se pueden manejar errores fácilmente en la app usando error boundaries y el trait throw.

Hot reloading por defecto y modo "desarrollo" para escritorio

  • El hot reloading está activado por defecto y mejora enormemente la experiencia de desarrollo de apps de escritorio.

Actualización de las plantillas de dioxus

  • Miles, nuevo miembro del equipo principal, renovó ampliamente la documentación y las plantillas.

Dioxus-Community y Dioxus-std

  • Dioxus Community actualizó crates importantes del ecosistema para alinearlos con la versión 0.5.

Funciones que llegarán pronto

  • Estabilización e integración del sistema de recursos, bundle splitting de .wasm, Islands e interactividad reanudable, server components, herramientas de desarrollo mejoradas y renovación de móvil y full-stack, entre otras.

Vista previa del regreso de Dioxus-Blitz

  • Con "Blitz 2.0", se integra Servo para permitir renderizado nativo usando WGPU con el mismo motor CSS que impulsa Firefox.

Cómo contribuir

  • Se puede contribuir traduciendo documentación, probando "good first issues", mejorando documentación, colaborando en el CLI o respondiendo preguntas en la comunidad de Discord.

Opinión de GN⁺

  • Dioxus 0.5 es una actualización importante para el desarrollo de GUI basado en Rust, y ofrece a los desarrolladores un entorno más fácil y seguro.
  • La eliminación de lifetimes y scopes reduce la complejidad del desarrollo en Rust, y la API basada en signals simplifica aún más el manejo de estado.
  • Las mejoras en hot reloading de CSS y en el sistema de eventos contribuirán a elevar la productividad del desarrollo frontend.
  • El hot reloading y la función de lanzamiento multiplataforma permiten a los desarrolladores tener una experiencia consistente en distintas plataformas.
  • Se espera que estos cambios tengan un impacto positivo en las comunidades de Rust y desarrollo web, especialmente para quienes desarrollan aplicaciones web y de escritorio con Rust.

1 comentarios

 
GN⁺ 2024-03-29
Opiniones en Hacker News
  • Experiencia del primer usuario con los cambios de Dioxus 0.5

    • El año pasado creó un cliente de Mastodon usando Dioxus y, en general, fue una buena experiencia, aunque todavía faltaban varias cosas.
    • Con los cambios de la versión 0.5 de Dioxus, se eliminó la mayor parte de la complejidad que enfrentaban los desarrolladores; en particular, se resolvieron la eliminación de los lifetimes y el problema de la clonación constante, por lo que espera una experiencia de desarrollo más cómoda.
    • Aún no ha probado la nueva versión, pero felicita al equipo por su esfuerzo.
  • Pregunta sobre el soporte de SVG

    • El usuario quiere saber si es posible interactuar con SVG, por ejemplo, dibujar un sudoku en SVG y poder hacer clic en cada celda.
  • Curiosidad sobre la programación en Rust y pregunta sobre cómo funciona el crate generational-box

    • Aunque no es programador de Rust, pide una explicación de cómo el crate generational-box puede conservar valores sin copiar y si eso es seguro.
  • Experiencia desarrollando la página principal de Freenet con Dioxus

    • El usuario está desarrollando con Dioxus la página principal distribuida de Freenet, que será el primer sitio web distribuido que la gente verá al configurar Freenet.
    • Le dejó una impresión positiva el enfoque de manejo de estado y la forma DSL de mapear HTML desde el código, similar al framework web de Kotlin Kweb.
  • Impresiones sobre cómo Dioxus captura los elementos del éxito de React y agrega innovación

    • El usuario está muy entusiasmado con que Dioxus capture los elementos del éxito de React y les sume innovación, publicando a una velocidad muy alta.
    • Felicita al equipo y espera probar la función de signals en esta versión.
  • Opinión sobre RSX en comparación con SwiftUI

    • El usuario prefiere algo más cercano a SwiftUI en lugar de RSX, y expresa que React/JSX no coincide con su visión de cómo debería verse el código de una "UI reactiva" en 2024.
    • Aunque SwiftUI no es perfecto, siente que el código queda más limpio, organizado y compartimentado que cuando usa React.
    • Afirma que la principal ventaja de usar JSX es poder reutilizar bibliotecas existentes creadas para la web, pero que RSX tiene poco "valor transferible" más allá de permitir que los desarrolladores trasladen su conocimiento conceptual de JSX a RSX.
    • Lamenta que no exista un proyecto de tipo "SwiftUI pero multiplataforma" y menciona Tokamak/TokamakUI, aunque parece que aún no está terminado y que su actividad ha disminuido.
  • Preocupación por la eliminación de los lifetimes en Dioxus

    • El usuario está confundido con la solución que elimina los lifetimes en Dioxus y se pregunta qué impacto tuvo eso en el rendimiento.
  • Pregunta sobre la integración con Web Components

    • El usuario tuvo dificultades para hacer que los componentes de Shoelace funcionaran bien al usar Yew, y quiere volver a intentar el proyecto con otro framework de Rust.
  • Pregunta sobre el método de renderizado de apps nativas

    • El usuario se pregunta si la forma en que Dioxus renderiza apps nativas ocurre dentro de una instancia del navegador.