読書ログ:入門WebAssembly
「入門WebAssembly」を読んだ。同僚の@summerwind さんの読書エントリを読んだことがきっかけ。前々から「CloudFlareやVercelがWebAssembly(以下Wasm)をサポートした」というニュースが連日あったものの、よくわかってなかったのでこの機にいっちょ入門してみるかと思い購入した。
内容
本書は、Wasmとは何か?なぜ使うのか?JavaScriptとの関係性は?といった概要の説明から始まり、基本的にWasmのアセンブリライクな言語、WAT(Web Assembly Text format)を手書きし、簡易なコンパイラを使ってハンズオン形式で理解を進めていくという内容になっている。進めていくうちに、wasmが利用する主なデータ構造の線形メモリの扱い方や、どのような場面でWasmを使うべきか、逆に使わない場面はどこか、といったWasmの基本が一通りの知識が身に付く。
特に、WebAssemblyの文字列(5章)や線形メモリ(6章)の内容が良い。Wasmがどのようにデータ構造を持ち、操作しているかを学ぶことができる。wasm上では文字列型というデータ型はなく、文字列は「線形メモリ内のここからここまでを扱います」といったoffset(開始位置)とlen(長さ)の情報として扱われている。そのため、Hello, worldプログラムの道のりも、他の言語と比べて少し長い。
感想
途中までフムフムという感じで読んでいたのだが、内容が途中から頭に入ってこない感覚があった。ハンズオンは基本WATとJavaScriptを行き来するのだが、各トピックで実装するプログラムが最終的にどのような挙動をするのか最初に説明されないまま進む箇所がある。WATコードの各行の記述の意味はわかるものの、それが何のために使われるのかがイメージできないといった感じ。
このような自分の体験から、JavaScriptとWATとのデータのやり取りの関係性がうまくイメージできるまでは、ハンズオンの進め方として以下を薦めたい。
各トピックの説明・WATサンプルコードの記述をざっと読む。このとき、コードの細かな説明は追わない。
JavaScriptサンプルコードの説明・記述をざっと読む。大体JavaScriptに出力を任せるため、最終的なプログラムの出力がどのようになるか把握しておく。
改めてWAT・JavaScriptのサンプルコード・説明を読み直し、写経・動かしてみる。
また、他のWasmの入門書籍があった中でこの本を選んだ理由について。
同じくWasmを扱った書籍に「ハンズオン WebAssembly(O'reilly)」がある。これはemscriptenを使ってC++をwasmに変換しながら学んでいくというもの。面白そうだったのだが、Wasm以外の周辺知識を習得する必要があり、学んでいくことの輪郭がぼやけそうという懸念があった。
今回読んだ「入門WebAssembly」はWATを手書きすることで、wasmが使うデータ構造を直接扱う経験をした。純粋なwasmの入門書としてはとても良かったと思う。WATはWasmのアセンブリ表現なので手書きするのはそれなりに大変だったが、実際に書かないとわからないことが学べたと思う。Wasmに何か問題があったときに、WATに逆アセンブルして自力で解決できるかもしれない。そんな状況はない方がいいけど。
この記事が気に入ったらサポートをしてみませんか?