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
Comentários do Hacker News
Experiência do primeiro usuário com as mudanças no Dioxus 0.5
Pergunta sobre suporte a SVG
Curiosidade sobre programação em Rust e pergunta sobre como funciona o crate
generational-boxgenerational-boxconsegue manter valores sem cópia e se isso é seguro.Experiência desenvolvendo a página inicial do Freenet com Dioxus
Impressões sobre os fatores de sucesso do React capturados pelo Dioxus e sua inovação
Opinião sobre RSX em comparação com SwiftUI
Preocupação com a remoção de lifetimes no Dioxus
Pergunta sobre integração com Web Components
Pergunta sobre a forma de renderização de aplicativos nativos