本記事は「WebAssembly連載」の第一回目の記事です。
皆さんこんにちは。虎の穴ラボのY.Fです。
今回の記事では、入門WebAssemblyを読んだ感想を書いてみたいと思います。
WebAssembly自体は以前も記事を書いていますので、そちらもぜひお読みください。
読んだ動機
上記の過去記事を見ていただければわかるように、もともとWebAssemblyに興味があったというのが大きいところとなります。
RustのWebAssemblyツールであるwasm-bindgenなどを使ってWebAssemblyを作っていたりしましたが、そもそものWebAssemblyの基礎知識に抜けている部分があるなと思いました。
なので、書籍等で体系的に学びたいと思い手にとった次第になります。
目次
書籍の目次
第1章 WebAssemblyとは 第2章 WATの基礎 第3章 関数とテーブル 第4章 低レベルのビット操作 第5章 WebAssemblyの文字列 第6章 線形メモリ 第7章 Webアプリケーション 第8章 キャンバスの操作 第9章 パフォーマンスの最適化 第10章 WebAssemblyのデバッグ 第11章 AssemblyScript 第12章 おわりに
全体の感想
個人的に欲しかった知識は1~6章までにまとまっていました。
章のタイトルにもあるように、低レイヤ側の情報が盛りだくさんです。あまり馴染みが無い方には難しく感じるかもしれませんが、逆にWebアプリケーションを通して低レイヤを学びたい方には良い教材になると思いました。
内容の難しさとしては、基本情報、応用情報あたりの内容が理解できればそこまで理解するのは難しくないのではないかと思います。
7章以降の内容については、具体的にWebAssemblyをどうアプリケーションに役立てるかといった内容が多いです。どちらかと言うと、WebAssemblyそのものというよりは、周辺のJavaScriptやツールとしてのブラウザなどといった内容が多かったように思います。
全体として、WebAssembly自体がどのように動作しているのか学びたい、WebAssemblyを通して低レイヤの勉強の第一歩にしたい、といった方にはとてもおすすめできます。それ以外にも、主にWebフロントエンドに携わっていて、今後のためにWebAssemblyを触っておきたいといった方にもベースとなる本だと感じました。
次から、気になった章と内容を紹介していきます。
1〜2章
タイトル通り、WebAssemblyとはなにかと、WebAssemblyの内部表現であるWATの紹介になります。WATをいくつか写経してみた感想としては、Webフロントエンド用のアセンブリ言語 といった感想です。
実際にソース例を上げると以下のような形になります。
(module (func (export "SumSquared") (param $value_1 i32) (param $value_2 i32) (result i32) (local $sum i32) (i32.add (local.get $value_1) (local.get $value_2)) local.set $sum (i32.mul (local.get $sum) (local.get $sum)) ) )
シンタックス上はいわゆるS式と呼ばれる形式になっています。
他にも、以下のようなことについて書かれています。
- 現在の利用シーン(オンラインゲーム、高度な数値計算、暗号処理)
- WebAssemblyの立ち位置(JavaScriptと相互補完して動作する)
- スタックマシンについて
この1、2章だけでも現状のWebAssemblyがどうなっているか、全体としてどういった立ち位置なのかキャッチアップできるので重要な章だと思いました。
3〜6章
主にWebAssemblyのデータやりとりについて書かれている章になります。
よくJavaScriptとWebAssembly側でのデータのやりとりが多いと速度が落ちるといった話が出ますが、この章ではそういった速度低下がなぜ起こるのかなどについて、WATで実際にソースを提示しながら進んでいきます。
したがって、各章やソースに対して速度比較も実施していくことになります。
文字列や関数がどのようにJavaScript側とWebAssembly側でやり取りされるのか具体的なメモリモデルや、ソース(WAT)を用いて説明されるので、実際に気をつけるべき箇所などがわかるようになるかなと思います。
一方で、章のタイトルにあるように、ビット演算等低レイヤ系の話題が多く出ます。そういった知識にあまり馴染みがない場合少し気合を入れて読む必要があるかなと思いました。
7章〜12章
7章以降は具体的なアプリケーションに対してどうやってWebAssemblyを使っているかについて書かれています。
これ以降はWebAssemblyのみの話というより、JavaScriptやChromeデバッガなどといった周辺知識の話題も多く出ています。
実際にWebAssemblyでどうアプリケーションを作るかなどについて知りたい方にとっては良い章になると思います。逆に、WebAssembly自体について知りたいなどの場合は先述の1〜6章でも十分事足りていると感じました。
まとめ
今回はWebAssembly連載の一回目の記事として本の感想を書いてみました。次は、冒頭で記載したWebAssemblyで作ったアプリケーションのように、具体的なアプリケーションやソフトウェアについても紹介してみたいと思います。
P.S.
採用
虎の穴では一緒に働く仲間を絶賛募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
yumenosora.co.jp
LINE スタンプ
エンジニア専用のメイドちゃんスタンプが完成しました!
「あの場面」で思わず使いたくなるようなスタンプから、日常で役立つスタンプを合計 40 個用意しました。
エンジニアの皆さん、エンジニアでない方もぜひスタンプを確認してみてください。
store.line.me