はじめに
この記事はWhy should you use Rust in WebAssembly?の非公式日本語訳になります。
なぜRust+WebAssemblyなのか
tl;dr
- WebAssemnly(以下、wasm)はJavaScriptの既存資産を活用しながら、必要な部分だけを高速化することができるテクノロジーである
- Rust以外にもwasmを構築できる言語はあるが、それぞれ以下の欠点がある
- C#, Go
- wasmランタイムだけで2MBを超えてしまう。Rustでは2KB以下で済む
- C, C++
- washランタイムはRustと同様に軽量
- JavaScriptとのインターフェイスがRustと比べて複雑
- C,C++と違ってRustはメモリセーフ
- C#, Go
よってもって、Rust+wasmが最適。
wasmとは?
wasmとはメジャーなブラウザー(IE11除く)上で動作するバイナリーファイルフォーマットである。このバイナリーはブラウザー向けにより高度に最適化、軽量化されているためJavaScriptよりも高速に起動、実行される。詳細はLin Clarkの記事を参照。
wasm活用のメリット
私は当初wasmについて、Rustを書く他の環境(例えばブラウザー)ための手段として見ていたが、それはwasmの特別さ、本質ではなかった。私はJavaScirpt、特にTypeScriptを書くことが好きであり、JavaScriptが持つWeb開発のためのエコシステムに含まれる膨大なアセットを放棄するべきではない。wasmはJavaScriptでは事足りない部分を補完するには最適なものである。
wasmによって、Webアプリケーションをゼロから作成することや、パフォーマンスが十分でない可能性がある既存のアプリケーションの一部をネイティブに近い速度で実行されるものに置き換えることができる。また、wasmはネイティブに似たアセンブリ形式であるため、多くの言語をそれに合わせてコンパイルできる。つまり、他のプラットフォームとWebの間でコードを共有することがより実用的になる。
Rust以外の言語との比較
上記の通り、C#やGoなど、Rust以外の言語もwasmへコンパイルすることは可能である。ではなぜこれらを活用しないのか。プログラミング言語には常に個人の好みがつきまとうが、それでもRustが仕事にとって最適である理由は少なからず存在する。
C#やGoといった言語はwasmのランタイムが巨大であるため、ゼロからのWebアプリケーション構築プロジェクト(greenfield project)
最後に
WIP