Un conjunto de herramientas para construir aplicaciones web y bibliotecas rápidas y confiables con óxido y WASM.
Gloo es una colección de bibliotecas, y esas bibliotecas proporcionan envoltorios de óxido ergonómicos para las API del navegador. web-sys / js-sys son muy difíciles / inconvenientes de usar directamente, por lo que Gloo proporciona envoltorios alrededor de los bindngs sin procesar, lo que facilita el consumo de esas API. Es por eso que se llama un "kit de herramientas", en lugar de "biblioteca" o "marco".
En la hoja de ruta de Rust and WebAssembly Working Group 2019, elegimos cultivar deliberadamente nuestro ecosistema de la biblioteca mediante la creación de un kit de herramientas modular:
Colaborando en un conjunto de herramientas modular
La idea de construir [bibliotecas de alto nivel] de una manera modular que permitirá a otros en la comunidad juntar los componentes de una manera diferente es muy emocionante para mí. Con suerte, esto hará que el ecosistema sea mucho más fuerte.
En particular, me encantaría ver un esfuerzo modular para implementar una biblioteca DOM virtual con JSX como sintaxis. Ha habido varios esfuerzos en este frente, pero todos han parecido relativamente monolíticos y "baterías incluidas". Espero que esto cambie en 2019.
- Ryan Levick en Rust Webassembly 2019
No cree silos de marca. La marca podría ser útil para lograr la fama. Pero si realmente queremos que la historia de Rust Wasm tenga éxito, deberíamos pensar en formas de colaborar en lugar de tallar territorio.
- Yoshua Wuyts en WASM 2019
En 2018, creamos bibliotecas fundamentales como
js-sysyweb-sys. En 2019, debemos construir bibliotecas modulares de alto nivel además de ellas y recolectar las bibliotecas bajo una caja de herramientas paraguas para una experiencia holística. Este kit de herramientas y sus bibliotecas pondrán a disposición todas las baterías que desee al apuntar a WASM.¿Construyendo una aplicación web de Greenfield? Use todo el conjunto de herramientas para comenzar a correr. ¿Elaborar cuidadosamente un pequeño módulo WASM e integrarlo de nuevo en un proyecto JavaScript existente? Tome esa biblioteca dirigida que necesita del kit de herramientas y úsela por sí misma.
Gloo es este kit de herramientas modular.
Apoya tanto las aplicaciones web completas como las bibliotecas pequeñas y específicas: Gloo y la colección de cajas de servicios públicos que componen su kit de herramientas, deberían ayudarlo a ser productivo si está escribiendo una aplicación web de campo verde con óxido y WASM. Y también debería ayudarlo a ser productivo si está escribiendo una biblioteca WASM pequeña y específica que se integrará en una aplicación JavaScript existente.
Cultive el ecosistema de la biblioteca Rust and Wasm: queremos usar Gloo como una función de forzamiento para crear y compartir los bloques de construcción del desarrollo web. Los tipos de bibliotecas que cualquier marco o biblioteca de alto nivel necesitaría construir. Queremos desenredar explícitamente estas bibliotecas y ponerlas a disposición para compartir en todo el ecosistema.
Kit de herramientas modular, no marco: Gloo debe ser una colección suelta de cajas de servicios públicos que se puedan usar individualmente o en todos juntos. Gloo no supone que "posee" toda la página web, que controla la función start WASM, etc. Esta falta de suposiciones permite alcanzar más casos de uso (como reemplazar quirúrgicamente una ruta de código caliente de JS) que los marcos monolíticos pueden. Siempre que sea posible, Gloo debe preferir las interfaces sobre las implementaciones, de modo que se pueden intercambiar diferentes implementaciones con diferentes enfoques.
Rápido: Aprovechemos las abstracciones de costo cero de Rust, y diseñemos con el rendimiento en mente, para mostrar a todos lo rápido que puede ser la web;)
Confiable: cada caja debe probarse a fondo. Pruebas de navegador sin cabeza. Pruebas QuickCheck. Usar el sistema de tipos para hacer imposible las clases completas de errores.
Pequeño: tamaño de código pequeño para cargas de página más rápidas. No hay accidentalmente tirar de toda la infraestructura de pánico y formato. Los usuarios no deberían tener que hacer una compensación entre usar bibliotecas Gloo y tener pequeños binarios WASM.
Idiomático: queremos construir API de oxidación, que se sientan naturales de usar. Las API de la web no fueron diseñadas para el lenguaje de óxido, y puedes sentir el desajuste de la impedancia de vez en cuando. Correcemos eso, cierre la brecha y hagamos bibliotecas que sean un placer de usar.
Este ejemplo usa gloo::events para agregar oyentes de eventos y gloo::timers para crear tiempos de espera. Crea un elemento <button> y agrega un oyente de eventos "Haga clic". Cada vez que se hace clic en el botón, inicia un segundo tiempo de espera, que establece el contenido de texto del botón en "¡Hola desde hace un segundo!".
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 } )
}
} ¿Quieres ayudarnos a construir Gloo? Echa un vistazo CONTRIBUTING.md !