3 pontos por GN⁺ 2024-03-29 | 1 comentários | Compartilhar no WhatsApp

Dioxus 0.5: reescrita de signals, remoção de lifetimes, hot reloading de CSS e mais

  • No Dioxus Labs existe uma regra informal que permite apenas uma reescrita por ano.
  • Dioxus é uma biblioteca para criar GUIs com Rust, originalmente iniciada como uma reescrita do Yew.
  • O Dioxus 0.5 mudou em uma direção mais simples, robusta e refinada em resposta aos pedidos da comunidade.

Novidades

  • Reescrita completa de dioxus-core, removendo todo o código unsafe.
  • Transição para uma API baseada em Signal, sem cópias e sem usar use_state e use_ref.
  • Remoção de todos os lifetimes e do estado cx: Scope.
  • Introdução de uma única função launch para iniciar apps em todas as plataformas.
  • Hot reloading de assets com suporte a Tailwind e CSS vanilla.
  • Reescrita de eventos que permite acesso aos tipos de evento nativos WebSys de cada plataforma.
  • Expansão de componentes para adicionar atributos de elemento (ex.: Link recebe todos os atributos de <a/>).
  • Integração entre error boundaries unificados e server futures com Suspense.
  • Desktop 5x mais rápido na reconciliação e handlers de assets personalizados para streaming de bytes.
  • Streaming de server functions e hot reloading full-stack.
  • Muitas melhorias de qualidade de vida, correções de bugs e mais.

O problema dos lifetimes

  • Para deixar o Dioxus mais simples, todos os lifetimes foram removidos.
  • Problemas com lifetimes assustam facilmente iniciantes em Rust e também confundem desenvolvedores experientes da linguagem.
  • O Dioxus 0.5 remove lifetimes e Scope e introduz signals, uma solução de gerenciamento de estado baseada em Copy.

Remoção de escopos e lifetimes

  • Na nova versão, os escopos e o lifetime 'bump foram removidos.
  • Declarar componentes e usar funções de runtime dentro deles ficou muito mais fácil.

Remoção de todo o código unsafe

  • A remoção do lifetime 'bump e dos escopos eliminou muito código unsafe.
  • dioxus-core 0.5 não contém código unsafe.

Signals

  • Signals foram introduzidos como elemento básico central do estado dos componentes.
  • Signal<T> é Copy mesmo sem ser o valor interno T.
  • Signals oferecem assinaturas mais inteligentes, então apenas os componentes que leem um signal são renderizados novamente.

Hot reloading de CSS

  • Suporte a hot reloading de arquivos CSS, com o CLI dx monitorando arquivos e transmitindo atualizações imediatamente para o app.

Reescrita do sistema de eventos

  • O dioxus 0.5 expõe os tipos de evento nativos de cada plataforma e introduz traits que fornecem uma API entre plataformas.

Lançamento cross-platform

  • A nova API cross-platform permite mirar facilmente várias plataformas com a mesma aplicação.

Sistema de assets em beta

  • O novo sistema de assets, manganis, integra-se ao CLI para verificar, empacotar e otimizar os assets dentro da aplicação.

Renderização desktop 5x mais rápida

  • Várias otimizações foram implementadas para aumentar a velocidade de renderização.

Expansão de atributos

  • Útil ao oferecer funcionalidades extras para elementos específicos.

Atalho de atributos

  • É possível usar sintaxe abreviada de atributos ao passar atributos para elementos e componentes.

Mesclagem de atributos em múltiplas linhas

  • Foi adicionada a funcionalidade de mesclagem de atributos para facilitar a criação de atributos condicionais.

Streaming de server functions

  • Suporte para que server functions possam transmitir dados ao cliente via streaming.

Plataforma CLI full-stack

  • É possível servir apps full-stack usando o comando dx.

Suporte a roteador no LiveView

  • O roteador funciona imediatamente em apps LiveView.

Handlers de assets personalizados

  • No desktop, há suporte a handlers de assets personalizados para transmitir dados de forma eficiente ao navegador.

Tratamento nativo de arquivos

  • Suporte adequado a arrastar e soltar arquivos no desktop.

Tratamento de erros

  • É possível tratar erros facilmente no app usando error boundaries e a trait throw.

Hot reloading por padrão e modo "development" para desktop

  • O hot reloading agora vem ativado por padrão e melhora bastante a experiência de desenvolvimento de apps desktop.

Atualização dos templates do dioxus

  • O novo membro do core team, Miles, reformulou amplamente a documentação e os templates.

Dioxus-Community e Dioxus-std

  • A Dioxus Community atualizou crates importantes do ecossistema para acompanhar o lançamento 0.5.

Recursos que chegam em breve

  • Estabilização e integração do sistema de assets, code splitting de .wasm, Islands e interações retomáveis, server components, ferramentas de desenvolvimento melhoradas, além de reformulações em mobile e full-stack.

Prévia do retorno do Dioxus-Blitz

  • Com o "Blitz 2.0", a integração com Servo permitirá renderização nativa usando WGPU com o mesmo motor de CSS que executa o Firefox.

Como contribuir

  • É possível contribuir com tradução de documentação, tentando uma "good first issue", melhorando a documentação, contribuindo com o CLI, respondendo perguntas da comunidade no Discord e mais.

Opinião do GN⁺

  • O Dioxus 0.5 é uma atualização importante para o desenvolvimento de GUIs com Rust, oferecendo aos desenvolvedores um ambiente de desenvolvimento mais fácil e seguro.
  • A remoção de lifetimes e escopos reduz a complexidade do desenvolvimento em Rust, e a API baseada em Signal torna o gerenciamento de estado mais simples.
  • O hot reloading de CSS e as melhorias no sistema de eventos devem ajudar a aumentar a produtividade no desenvolvimento frontend.
  • O hot reloading e o lançamento cross-platform permitem que os desenvolvedores tenham uma experiência de desenvolvimento consistente em várias plataformas.
  • Espera-se que essas mudanças tenham um impacto positivo nas comunidades de Rust e desenvolvimento web, especialmente para quem cria aplicações web e desktop com Rust.

1 comentários

 
GN⁺ 2024-03-29
Comentários do Hacker News
  • Experiência do primeiro usuário com as mudanças no Dioxus 0.5

    • No ano passado, ele criou um cliente de Mastodon usando Dioxus e, no geral, a experiência foi boa, mas ainda faltavam muitas coisas.
    • Com as mudanças da versão 0.5 do Dioxus, a maior parte da complexidade que os desenvolvedores enfrentavam foi removida, especialmente com a eliminação de lifetimes e a resolução do problema de clonagem constante, o que faz esperar uma experiência de desenvolvimento mais agradável.
    • Ele ainda não testou a nova versão, mas parabenizou a equipe pelo esforço.
  • Pergunta sobre suporte a SVG

    • O usuário quer saber se é possível interagir com SVG, por exemplo, desenhar um sudoku em SVG e clicar em cada célula.
  • Curiosidade sobre programação em Rust e pergunta sobre como funciona o crate generational-box

    • Embora não seja programador Rust, ele pediu uma explicação de como o crate generational-box consegue manter valores sem cópia e se isso é seguro.
  • Experiência desenvolvendo a página inicial do Freenet com Dioxus

    • O usuário está desenvolvendo com Dioxus a página inicial distribuída do Freenet, que será o primeiro site distribuído que as pessoas verão ao configurar o Freenet.
    • Ele teve uma impressão positiva do gerenciamento de estado e da abordagem DSL de mapeamento de HTML a partir do código, semelhantes ao framework web Kotlin Kweb.
  • Impressões sobre os fatores de sucesso do React capturados pelo Dioxus e sua inovação

    • O usuário está muito animado com o fato de o Dioxus captar os elementos de sucesso do React e adicionar inovação por cima, lançando recursos em ritmo muito rápido.
    • Ele parabenizou a equipe e disse que está ansioso para testar o recurso de signals desta versão.
  • Opinião sobre RSX em comparação com SwiftUI

    • O usuário prefere algo mais próximo de SwiftUI em vez de RSX e expressa que React/JSX é diferente da sua visão de como o código de uma "UI reativa" deveria parecer em 2024.
    • Embora SwiftUI não seja perfeito, ele sente que o código fica mais limpo e melhor organizado do que ao usar React.
    • Ele argumenta que a principal vantagem de usar JSX é reaproveitar bibliotecas existentes criadas para a web, mas que o RSX tem pouco "valor transferível" além de permitir que desenvolvedores levem seu conhecimento conceitual de JSX para RSX.
    • O usuário lamenta que não exista um projeto "SwiftUI but cross-platform" e menciona Tokamak/TokamakUI, mas observa que ainda não está pronto e parece ter perdido atividade.
  • Preocupação com a remoção de lifetimes no Dioxus

    • O usuário está confuso com a solução usada pelo Dioxus para remover lifetimes e quer saber que impacto isso teve no desempenho.
  • Pergunta sobre integração com Web Components

    • O usuário teve dificuldade para fazer componentes Shoelace funcionarem bem ao usar Yew e quer tentar novamente o projeto com outro framework Rust.
  • Pergunta sobre a forma de renderização de aplicativos nativos

    • O usuário quer saber se a forma como o Dioxus renderiza aplicativos nativos acontece dentro de uma instância de navegador.