Ein Toolkit zum Erstellen schneller, zuverlässiger Webanwendungen und Bibliotheken mit Rost und WASM.
Gloo ist eine Sammlung von Bibliotheken, und diese Bibliotheken bieten ergonomische Rost -Wrapper für Browser -APIs. web-sys / js-sys sind sehr schwierig / unangenehm zu verwenden, sodass Gloo Wrapper rund um die Rohbindungen liefert, was es einfacher macht, diese APIs zu konsumieren. Aus diesem Grund wird es als "Toolkit" anstelle von "Bibliothek" oder "Framework" bezeichnet.
In der Roadmap der Rost and WebAssembly -Arbeitsgruppe 2019 entschieden wir uns, unser Bibliotheksökosystem absichtlich zu pflegen, indem wir ein modulares Toolkit erstellen:
Zusammenarbeit mit einem modularen Toolkit
Die Idee, [hochrangige Bibliotheken] auf modulare Weise zu bauen, die es anderen in der Community ermöglicht, die Komponenten auf eine andere Weise zusammenzustellen, ist für mich sehr aufregend. Dies wird hoffentlich das gesamte Ökosystem als Ganzes stärker machen.
Insbesondere würde ich gerne eine modulare Anstrengung zur Implementierung einer virtuellen DOM -Bibliothek mit JSX -wie Syntax sehen. Es gab einige Anstrengungen in dieser Front, aber alle schienen relativ monolithisch und „Batterien inklusive“. Ich hoffe, das wird sich 2019 ändern.
- Ryan Levick in Rust WebAssembly 2019
Schaffen Sie keine Markensilos. Branding könnte möglicherweise nützlich sein, um Ruhm zu erlangen. Aber wenn wir wirklich wollen, dass Rusts WASM -Geschichte erfolgreich ist, sollten wir uns überlegen, wie wir zusammenarbeiten können, anstatt Gebiete zu schnitzen.
- Yoshua Wuyts im WASM 2019
Im Jahr 2018 haben wir grundlegende Bibliotheken wie
js-sysundweb-syserstellt. Im Jahr 2019 sollten wir modulare, hochrangige Bibliotheken auf sich aufbauen und die Bibliotheken unter einem Dach-Toolkit-Kisten für ein ganzheitliches Erlebnis sammeln. Dieses Toolkit und seine Bibliotheken stellt alle gewünschten Batterien zur Verfügung, die Sie bei der Targeting -WASM gewünscht haben.Erstellen einer Greenfield -Webanwendung? Verwenden Sie das gesamte Toolkit, um den Boden zu treffen. Sorgfältig ein winziges WASM -Modul herstellen und in ein vorhandenes JavaScript -Projekt wieder integrieren? Nehmen Sie diese eine gezielte Bibliothek, die Sie vom Toolkit benötigen, und verwenden Sie sie selbst.
Gloo ist dieses modulare Toolkit.
Unterstützen Sie sowohl ganze Webanwendungen als auch kleine, gezielte Bibliotheken: Gloo und die Sammlung von Dienstprogrammkisten, aus denen sein Toolkit besteht, sollte Ihnen helfen, produktiv zu sein, wenn Sie eine Green-Field-Webanwendung mit Rost und WASM schreiben. Und es sollte Ihnen auch helfen, produktiv zu sein, wenn Sie eine kleine, gezielte WASM -Bibliothek schreiben, die in eine vorhandene JavaScript -Anwendung integriert wird.
Kultivieren Sie das Ökosystem Rost und die WASM -Bibliothek: Wir möchten Gloo als Zwangsfunktion zum Erstellen und Teilen der Bausteine der Webentwicklung verwenden. Die Arten von Bibliotheken, die eine Framework- oder eine hochrangige Bibliothek erstellen müssten. Wir möchten diese Bibliotheken ausdrücklich entwirren und sie für das Teilen des gesamten Ökosystems zur Verfügung stellen.
Modulares Toolkit, nicht Framework: Gloo sollte eine lose Sammlung von Dienstprogrammkisten sein, die einzeln oder alle zusammen verwendet werden können. Gloo geht nicht davon aus, dass es die gesamte Webseite "besitzt", dass es die WASM start usw. steuert usw. Mit diesem Mangel an Annahmen können mehr Anwendungsfälle erreicht werden (z. B. einen chirurgischen Ersetzen eines Hot -Code -Pfades durch JS) als monolithische Frameworks können. Wo immer möglich, sollte Gloo Schnittstellen gegenüber Implementierungen bevorzugen, sodass verschiedene Implementierungen mit unterschiedlichen Ansätzen tauschbar sind.
Schnell: Lassen Sie uns Rusts Null-Kosten-Abstraktionen und Design unter Berücksichtigung der Leistung nutzen, um allen zu zeigen, wie schnell das Web sein kann;)
Zuverlässig: Jede Kiste sollte gründlich getestet werden. Kopflose Browser -Tests. QuickCheck -Tests. Verwenden des Typsystems, um ganze Klassen von Fehler unmöglich zu machen.
Klein: Kleine Codegröße für schnellere Seite. Kein versehentliches Anziehen der gesamten Panik- und Formatierungsinfrastruktur. Benutzer sollten keinen Kompromiss zwischen der Verwendung von Gloo -Bibliotheken und kleinen WASM -Binärdateien machen müssen.
Idiomatisch: Wir wollen rostige APIs bauen, die sich natürlich anfühlen. Die APIs des Web waren nicht für die Rostsprache ausgelegt, und Sie können ab und zu die Impedanz -Nichtübereinstimmung spüren. Lassen Sie uns das korrigieren, die Lücke überbrücken und Bibliotheken machen, die eine Freude sind, zu verwenden.
In diesem Beispiel wird gloo::events zum Hinzufügen von Ereignishörern und gloo::timers zum Erstellen von Zeitüberschreitungen verwendet. Es erstellt ein <button> Element und fügt einen "Klicken" -Ereigungslistener hinzu. Immer wenn die Schaltfläche klickt, startet sie eine Sekunde Zeit, in der der Textinhalt der Schaltfläche auf "Hallo vor einer Sekunde!" Setzt.
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 } )
}
} Möchten Sie uns helfen, Gloo zu bauen? Schauen Sie CONTRIBUTING.md bei.