1年以上前ですが、このブログでプログラミング言語のトレンド調査を行いました。
その中でも上位に来ていたものに
「Assembly Language」
がありました。
ブログを上げた際にはアセンブラの一種かと思い、特に調べることもなかったのですが、最近、よく耳にするワードがあります。
「WebAssembly」
さらにはその中で「Rust」がいいよ、という内容が目に止まりました。
ただ「Rsut」は「Rsut」だよね?「Web」と書かれているということはブラウザで動作するということか?
いろいろ気になったので調べてみました。
目次
WebAssembly (WASM)とは?
WebAssembly (Wasm)は、ウェブブラウザで実行される低レベルのバイナリフォーマットで、主に高性能なウェブアプリケーションの開発に利用されます。JavaScriptとは異なり、WebAssemblyはバイナリ形式であるため、ブラウザが解釈しやすく、実行速度が速いのが大きな特徴です。
https://qrz.co.jp/blog/webassembly_function/
弊社でもJavaScriptのフレームワークはいくつか導入しています。
- React
- Angular
- Vue.JS
などを使ってサービスの提供を行っています。
確かにネックとなるのはそれほど実行速度は早くない、というところでした。
それがWebAssemblyでは解消されるということになります。
WebAssemblyの特徴
上記で実行速度を上げましたが、その他の特徴も調べてみました。
JavaScriptを超える高速処理
これは先ほども述べましたが、バイナリ形式であるためが大きいものと想像されます。
従来はJavaScriptによって記述されていた部分をWebAssemblyに置き換えることで、処理速度が改善されます。実測値の報告データによると約3倍の処理速度が期待できるそうです。
3倍の違いというのはかなり大きいです。高速な処理が要求されるであろうゲームや、多くのデータを利用するシミュレーションやAIなどに有効になってきそうです。
多くのブラウザで対応済み
メジャーブラウザは多くで対応済みです。なので動作に心配ないのも安心です。
- Chrome
- Edge
- Firefox
- Safari
- Opera
最新の対応状況はこちらで確認できます。
移植性・言語選択肢の多さ
「Rust」が使える?という今回の疑問の回答がこちらになります。
低レベルのバイナリフォーマットは標準化されており、多くの言語が対応しています。
- Java
- PHP
- C# .NET
- C++
- Ruby
- C
- Swift
- R
- Go
- Rust
「Rust」もありますね。
バイナリフォーマットさえ出力できるものであれば、言語は問わないということですね。
WebAssemblyでは
多くの言語が使える=既存のソースコードの流用ができる、ということにもなります。
「Rust」には「Yew」というフレームワークもありました。
また最近はWebAssemblyに特化した「Oynx」といった言語も登場しています。
どの言語が利用されているのか?
Scott Logic社が、WebAssemblyの利用状況などに関する調査報告を毎年行っており、直近の「The State of WebAssembly 2023」を見てみます。
記事のグラフを抜粋しました。Rustが一番利用されています。さらに3年連続で一番利用されていることが分かります。40%以上と高い利用率ですので、よく話題になっているのかもしれません。
もう一つ、気になるグラフがありました。
WebAssemblyは実は利用用途はWebだけではないんです。
サーバレス、コンテナ、プラグイン開発と多岐に渡ります。
上記ではWebAssembly (Wasm)は、ブラウザで実行と書きましたが、正確には仮想マシン用バイナリ命令フォーマットの仕様になります。
そのフォーマットがWasm ランタイムと呼ばれるスタックベースの仮想マシンによって実行されることになるため、特定のプラットフォームに依存しないことになります。
また、Wasm は OS、 CPU アーキテクチャに依存していません。
OS (Windows、Mac、Linux) や CPU アーキテクチャ (x86-64、ARM) が異なる環境でも動作します。
Wasm ランタイムが OS や CPU アーキテクチャの差異を吸収しているため Wasm アプリケーションでは意識する必要がありません。
これによってWebだけではなく、いろいろなところで活用できるというわけです。
最近良く聞く、と言いましたが、実はAWSのLambdaでWebAssemblyが利用できる、というのを見たのが最初の知ったきっかけになります。
サーバサイド向けとしてSpinというフレームワークも存在しているようです。
WebAssemblyでできないこと
良いことずくめなWebAssemblyですが、できないこともあります。
システムのルート権限でアクセスできない
OS やデバイス自体にシステムのルート権限でアクセスできません。したがって、USB や Bluetooth、画面などに直接アクセスすることは不可能です。
DOM操作が行えない
WebAssemblyはブラウザがHTMLを解析する際に生成するデータ構造であるDOM(Document Object Modelの略)の操作もできません。
WebAssemblyの設計仕様はHTMLの要素を操作するものではありません。DOMの操作にはJavaScriptを使う必要があります。
そうなんです、WebAssemblyはブラウザ上では単独では利用できないのです。
ですがJavaScriptを使えば良いだけですので、そんなにネガティブに考える必要はなさそうです。
WebAssemblyを使ってみたい
調べれば調べるほど、いろいろな可能性を秘めたWebAssembly。
しかし最近の動向でもWeb以外での利用も増えてきているとはいえ、メインはWeb利用です。
多言語対応、プラットフォーム非依存、高速性など多くの特徴を持っており、ぜひ取り入れてみたいと思わせる魅力があります。
新しいサービス開発となったら、Yewあたりで、いやまずはLambdaで使ってみたいですね。