錆びとWASMを備えた高速で信頼性の高いWebアプリケーションとライブラリを構築するためのツールキット。
Glooはライブラリのコレクションであり、これらのライブラリはブラウザAPIに人間工学に基づいた錆ラッパーを提供します。 web-sys / js-sysは非常に難しい /不便であるため、Glooは生のバインドの周りにラッパーを提供し、それらのAPIを容易にしやすくします。これが、「ライブラリ」または「フレームワーク」ではなく、「ツールキット」と呼ばれる理由です。
Rust and WebAssembly Working Groupの2019ロードマップでは、モジュラーツールキットを構築することにより、ライブラリエコシステムを意図的に育成することを選択しました。
モジュラーツールキットでのコラボレーション
コミュニティ内の他の人がコンポーネントを別の方法でまとめることを可能にするモジュール式の方法で[高レベルのライブラリ]を構築するというアイデアは、私にとって非常にエキサイティングです。これにより、エコシステム全体がはるかに強力になることを願っています。
特に、JSXのような構文のような仮想DOMライブラリを実装するためのモジュール式の取り組みを見てみたいと思います。この面でいくつかの努力がありましたが、すべてが比較的モノリシックで「バッテリーが含まれている」ように見えました。これが2019年に変わることを願っています。
- Rust WebAssembly 2019のRyan Levick
ブランドのサイロを作成しないでください。ブランディングはおそらく名声を得るのに役立つかもしれません。しかし、真にRustのWasmの物語が成功したい場合は、領土を切り開くのではなく、協力する方法を考えるべきです。
- WASM 2019のYoshua Wuyts
2018年には、
js-sysやweb-sysなどの基礎ライブラリを作成しました。 2019年には、その上にモジュール式の高レベルのライブラリを構築し、包括的なツールキットクレートの下にライブラリを収集して、全体的な体験をする必要があります。このツールキットとそのライブラリは、WASMをターゲットにするときに必要なすべてのバッテリーを利用できるようにします。Greenfield Webアプリケーションの構築?ツールキット全体を使用して、走っています。小さなWASMモジュールを慎重に作成し、既存のJavaScriptプロジェクトに統合しますか?ツールキットから必要な1つのターゲットライブラリをつかみ、単独で使用します。
Glooはこのモジュラーツールキットです。
Webアプリケーション全体と、Gloo、およびそのツールキットを構成するユーティリティクレートのコレクションの両方をサポートすることは、RustとWasmを使用したGreen-Field Webアプリケーションを書いている場合に生産的になるのに役立つはずです。また、既存のJavaScriptアプリケーションに統合される小さなターゲットを絞ったWASMライブラリを書いている場合、生産的になるのに役立つはずです。
RustおよびWasm Libraryのエコシステムを栽培します。Web開発の構成要素を作成および共有するための強制機能としてGlooを使用したいと考えています。フレームワークや高レベルのライブラリが構築する必要があるライブラリの種類。これらのライブラリを明示的に解き放ち、エコシステム全体で共有できるようにしたいと考えています。
フレームワークではなくモジュラーツールキット:Glooは、個別に、またはすべて一緒に使用できるユーティリティクレートのゆるいコレクションである必要があります。 Glooは、Webページ全体を「所有」し、WASM start機能などを制御するとは想定していません。この仮定の欠如により、モノリシックフレームワークができるよりも多くのユースケース(JSからのホットコードパスを外科的に置き換えるなど)に到達することができます。可能な限り、Glooは実装よりもインターフェイスを好む必要があります。そうすれば、さまざまなアプローチを持つさまざまな実装が交換可能です。
高速: Rustのゼロコストの抽象化を活用し、パフォーマンスを念頭に置いてデザインして、Webがどれだけ速くなるかを全員に示しましょう;)
信頼性:すべての木枠は徹底的にテストする必要があります。ヘッドレスブラウザテスト。 QuickCheckテスト。タイプシステムを使用して、バグのクラス全体を不可能にします。
小さい:ページの読み込みを速くするための小さなコードサイズ。すべてのパニックおよびフォーマットインフラストラクチャを誤って引っ張ることはありません。ユーザーは、Glooライブラリを使用してから小さなWASMバイナリを持つこととの間にトレードオフを行う必要はありません。
イディオマティック:私たちは、使用するのが自然に感じられるさび的なAPIを作りたいです。 WebのAPIは錆言語向けに設計されていません。インピーダンスの不一致を時々感じることができます。それを修正して、ギャップを埋め、使用する喜びのライブラリを作りましょう。
この例では、イベントリスナーを追加するためのgloo::eventsと、タイムアウトを作成するためのgloo::timers使用します。 <button>要素を作成し、「クリック」イベントリスナーを追加します。ボタンがクリックされるたびに、1秒のタイムアウトが開始され、ボタンのテキストコンテンツを「1秒前からこんにちは!」に設定します。
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 } )
}
} Glooの構築を手伝いたいですか? CONTRIBUTING.mdをチェックしてください!