TL;DR
- WASMって凄いね.JavaScript処理系すら実装できるんだって.
- ならブラウザはWASMだけをサポートすれば楽なんじゃないかな.
という考察記事です.
経緯
私は少し前からRustでJavaScript処理系を書いています.(まだまだ機能不足ですが)
ある日,ふと思いました.*Rustで書いてるんだからWASMに変換するのも楽なんじゃないか?*と.
面白そうなので,試してみたわけです.
意外と面倒だった
RustからWASMへと変換する方法を説明した記事は,調べればいくらでもでてきます.無論そのとおりに手を動かしてみるわけです.
しかし,いざやってみるとコンパイラに結構文句を言われます.考えてみれば当たり前ですが,libc
なんて使っていたらWASMには変換できません.
なので余分なコードは削り,WASMに変換できるようコードを書き直しました.
すると,すんなりWASMに変換することができました.やったね.
動いた
そしてついに,ブラウザ上でJavaScript(on WASM)が動いたわけです:
Rustで書かれた JavaScriptエンジンが WASMとして Webブラウザ上で動きました!
— uint256_t (@uint256_t) April 1, 2019
実際にここから試すことができます.まだES6に全然準拠できていないので,お遊び程度のものだと思ってください.
何が嬉しいのか
現在,ブラウザは直接JavaScriptをサポートしています.<script>
の中に書けば動きますね.
ですが,最近は生JavaScriptを書く人は少なくて,TypeScriptなどのAltJSを使う人が多いようです.
こうなると,JSってなんで存在してるんだろうなーと思えてきます.もちろんWebページに動きを加えるためのものですが,別にJSじゃなくても良いわけです.もうちょっと変な挙動のない言語が欲しくなります.
そこでWASMです.
WASMからDOM操作などの今までJSがやっていた仕事が可能になれば,JS処理系をWASM上で動かすことで後方互換性は保たれる.さらに,JS処理系をブラウザ本体から切り離すのも簡単になります.
任意の言語をブラウザ上で実践的に使うことすらできるようになるかもしれない.
自分で作ったJS処理系が実際にWASM上で動いて,いろんなことを想像しました.
WASMは,確実に今のWebを変えていくんだろうなぁと思っています.