WebAssembly
なぜRustか?
予測可能なパフォーマンス
予測できないガベージコレクションによって、動作が停止することはありません。JITコンパイラによる急激なパフォーマンス低下もありません。低レベルの制御と高レベルのエルゴミクスの両立を実現しています。
小さいコードサイズ
コードサイズが小さくなるとページの読み込み速度は向上します。Rustが生成する.wasm
はガベージコレクタのように必要のないものを含みません。先進的な最適化とツリーシェイキングは不要なコードを取り除きます。
モダンで快適な環境
アクティブなライブラリのエコシステムは開発を進める際に大きな助けとなります。高い表現力を持つゼロコスト抽象化も備わっています。そしてコミュニティはあなたを歓迎して学習をサポートします。
JavaScriptとのすてきな共演
置換ではなく、拡張
WebAssemblyの目的はJavaScriptを終わらせるのではなく共存して、処理が重いタスクやレイヤの低いタスクの処理をサポートすることです。これらのタスクは、パフォーマンスに重点を置くRustだからこそ恩恵を受けられると言えるでしょう。
一般的なツールチェーンとの連携
RustのWebAssemblyパッケージはnpmのようなパッケージレジストリに公開できます。webpackやParcelなどをバンドルしてリリースすることもできます。管理にはnpm audit
やGreenkeeperのようなツールが使えます。
シームレスな相互運用
RustとWebAssembly、JavaScript API間をバインドするコードは自動生成できます。web-sys
のようなライブラリを使えば、各ウェブプラットフォームへのバインディングをパッケージ済みの状態で提供することもできます。
本番環境での利用
RustをWASMにコンパイルして、サーバーレス関数から呼び出すことができます。これはとても素晴らしいことで、より多くのことをするのが待ちきれません。
– Steven Pack, Serverless Rust with Cloudflare Workers
source-map
のJavaScript実装はパフォーマンスの名の下に複雑なコードが跋扈しており、私たちはそれを表現力のあるRustに書き換えました。Rustは明確な表現とランタイムパフォーマンスのどちらか一方を選ぶよう迫ることはありません。
– Nick Fitzgerald, Oxidizing Source Maps with Rust and WebAssembly
上記のように、[Rustの]特性を活かせば、WASMを使ってwebページにDivANSコーデックを簡単に組み込めます。
– Daniel Reiter Horn and Jongmin Baek, Building Better Compression Together with DivANS