Um kit de ferramentas para criar aplicativos e bibliotecas rápidos e confiáveis com ferrugem e WASM.
O Gloo é uma coleção de bibliotecas, e essas bibliotecas fornecem invólucros ergonômicos de ferrugem para APIs do navegador. web-sys / js-sys são muito difíceis / inconvenientes de usar diretamente, para que o Gloo forneça invólucros em torno dos vínculos brutos, o que facilita a consumo dessas APIs. É por isso que é chamado de "kit de ferramentas", em vez de "biblioteca" ou "estrutura".
No roteiro de Rust and WebAssembly Working Group em 2019, optamos por cultivar deliberadamente nosso ecossistema de bibliotecas, construindo um kit de ferramentas modular:
Colaborando em um kit de ferramentas modular
A idéia de construir [bibliotecas de alto nível] de maneira modular que permitirá que outras pessoas da comunidade juntam os componentes de uma maneira diferente é muito emocionante para mim. Esperamos que isso torne o ecossistema como um todo muito mais forte.
Em particular, eu adoraria ver um esforço modular para implementar uma biblioteca Virtual DOM com a Sintaxe JSX. Houve vários esforços nessa frente, mas todos pareciam relativamente monolíticos e "baterias incluídas". Espero que isso mude em 2019.
- Ryan Levick em Rust WebAssembly 2019
Não crie silos de marca. A marca pode ser útil para alcançar a fama. Mas se realmente queremos que a história do WASM de Rust tivesse sucesso, devemos pensar em maneiras de colaborar em vez de esclarecer o território.
- Yoshua Wuyts em Wasm 2019
Em 2018, criamos bibliotecas fundamentais como
js-syseweb-sys. Em 2019, devemos construir bibliotecas modulares e de alto nível em cima delas e coletar as bibliotecas sob uma caixa de kit de ferramentas para uma experiência holística. Este kit de ferramentas e suas bibliotecas disponibilizarão todas as baterias que você deseja ao segmentar o WASM.Construindo um aplicativo da Web Greenfield? Use todo o kit de ferramentas para acertar o chão. Criando cuidadosamente um minúsculo módulo WASM e integrando -o novamente em um projeto JavaScript existente? Pegue a biblioteca direcionada de que você precisa do kit de ferramentas e use -a por si só.
Gloo é este kit de ferramentas modular.
Apoie os aplicativos da Web inteiros e pequenas bibliotecas direcionadas: Gloo, e a coleção de caixas de utilitário que compõem seu kit de ferramentas, devem ajudá-lo a ser produtivo se estiver escrevendo um aplicativo da Web de campo verde com Rust and Wasm. E também deve ajudá -lo a ser produtivo se estiver escrevendo uma pequena biblioteca de WASM direcionada que será integrada a um aplicativo JavaScript existente.
Cultive o ecossistema da biblioteca de ferrugem e WASM: queremos usar o Gloo como uma função de forçamento para criar e compartilhar os blocos de construção do desenvolvimento da Web. Os tipos de bibliotecas que qualquer estrutura ou biblioteca de alto nível precisariam construir. Queremos separar explicitamente essas bibliotecas e disponibilizá -las para compartilhar em todo o ecossistema.
Kit de ferramentas modular, não estrutura: o Gloo deve ser uma coleção solta de caixas de utilidade que podem ser usadas individualmente ou todas juntas. O Gloo não assume que "possui" toda a página da web, que controla a função start do WASM, etc. Essa falta de suposições permite alcançar mais casos de uso (como substituir cirurgicamente um caminho de código quente do JS) do que as estruturas monolíticas podem. Sempre que possível, o Gloo deve preferir interfaces às implementações, para que diferentes implementações com diferentes abordagens possam ser trocadas.
Fast: vamos alavancar as abstrações de custo zero de Rust e o design com desempenho em mente, para mostrar a todos o quão rápido a web pode ser;)
Confiável: toda caixa deve ser cuidadosamente testada. Testes de navegador sem cabeça. Testes QuickCheck. Usando o sistema de tipos para tornar impossível classes inteiras de bugs.
Pequeno: tamanho pequeno do código para carregamentos de página mais rápidos. Não há acidentalmente puxando toda a infraestrutura de pânico e formatação. Os usuários não devem precisar fazer uma troca entre usar bibliotecas Gloo e ter pequenos binários de WASM.
Idiomatic: Queremos construir APIs de ferrugem, que parecem naturais de usar. As APIs da Web não foram projetadas para a linguagem ferrugem e você pode sentir a incompatibilidade de impedância de vez em quando. Vamos corrigir isso, preencher a lacuna e fazer bibliotecas que sejam uma alegria de usar.
Este exemplo usa gloo::events para adicionar ouvintes de eventos e gloo::timers para criar tempos limites. Ele cria um elemento <button> e adiciona um ouvinte de evento "clique" a ele. Sempre que o botão é clicado, ele inicia um tempo de tempo de um segundo, que define o conteúdo de texto do botão como "Olá, um segundo atrás!".
use gloo :: { events :: EventListener , timers :: callback :: Timeout } ;
use wasm_bindgen :: prelude :: * ;
pub struct DelayedHelloButton {
button : web_sys :: Element ,
on_click : events :: EventListener ,
}
impl DelayedHelloButton {
pub fn new ( document : & web_sys :: Document ) -> Result < DelayedHelloButton , JsValue > {
// Create a `<button>` element.
let button = document . create_element ( "button" ) ? ;
// Listen to "click" events on the button.
let button2 = button . clone ( ) ;
let on_click = EventListener :: new ( & button , "click" , move |_event| {
// After a one second timeout, update the button's text content.
let button3 = button2 . clone ( ) ;
Timeout :: new ( 1_000 , move || {
button3 . set_text_content ( Some ( "Hello from one second ago!" ) ) ;
} )
. forget ( ) ;
} ) ;
Ok ( DelayedHelloButton { button , on_click } )
}
} Quer nos ajudar a construir Gloo? Confira CONTRIBUTING.md !