Rust+WebAssemblyでWebアプリは作れるのかMeguro.es #15Nobuhito Ibaraki@niba1122
View Slide
Rustとは●Mozillaが開発● 高速● 安全●2016年、2017年のStackOverflow DeveloperSurveyで「最も愛されているプログラミング言語」で一位(Wikipedia)
Rustとは●WebAssemblyと連携○WebAssemblyへのコンパイルをサポート→emscripten不要○cargo webで簡単にビルドできる(https://github.com/koute/cargo-web)
これだけじゃないんです
強力なマクロ● パターンマッチングを使いながら自在に構文を拡張可能● マクロでテンプレートエンジンを作れたりする!(maudとか)maud(https://maud.lambda.xyz/)マクロ言語の機能でJSXのような構文拡張が可能
Client Sideを扱う強力なライブラリ:stdweb●Rustの中にJavaScript風のマクロを記述できる●JavaScriptのAPIを扱うインターフェース(alertとかquery selectorとか)簡単にDOMやイベントを扱える
JSXのような構文拡張DOMの操作+
Rust+WebAssemblyのフレームワークを作れるのでは?
世界初かもしれない・・・
そう甘くはなかった● 変数のライフタイムとの戦い(コールバック実行時に変数の生存を保証させるのが難しい)●DOMのレンダリングと状態更新はなんとか出来た●ComponentやVirtual DOMまでは実装できなかったrju(龍)(https://github.com/niba1122/rju)
自作フレームワークの実装で四苦八苦している中・・・
yewhttps://github.com/DenisKolodin/yew/
yewとは●ElmやReactJSの影響を受けたRustフレームワーク(名前はVue.jsに似てる?)●Virtual DOMによる差分更新●Component●HTMLライクな記法(ちょっと癖はある)
Model状態を持つ構造体これにRenderableやComponentトレイトを実装することでコンポーネントとしてレンダリングできる。
Template
Handle EventAPI RequestUpdate State
Componentの呼び出し
サンプルアプリhttps://github.com/niba1122/rust_app
まとめ●yewを使えばRust+WebAssemblyでインタラクティブなアプリを作れる!● パフォーマンスもいいらしいhttps://github.com/DenisKolodin/yew/issues/5#issuecomment-354777076●JSerがRustのライブラリをいきなり作るのはハード
Rust+WebAssemblyは● 型安全● ビルドツール不要● ハイパフォーマンスの素敵な世界です。どなたか一緒にRustを書きましょう!
ご清聴ありがとうございました