前回の入門:msyksphinz.hatenablog.com
今更であるが、読書をするまとまった時間ができたので、少しずつ「ハンズオン WebAssembly」を読んでみることにした。
ハンズオンは実際にコードを動かしながらはできていないのだが、可能な限りコードを追いかけて理解するように努めている。 幸いなことにコード自体はそれほど難しいものではなく、C++のコードはそれなりに読めるのだがJavaScript側は良く分からない。
前半部分のハンズオンについてとりあえず読み終えた。ポイントとなるのは、WebAssemblyのコードと、フロントエンドで動作しているJavaScriptをどう連携するか、ということだ。
- JavaScript側のメモリをWebAssemblyと共有し、連携する(エラーメッセージなどをJavaScript側に通知できるようにする)
- Emscriptenにおいて、WebAssemblyとJavaScriptを両方生成する方式と、WebAssemblyのみを生成してJavaScriptは自力で記述する方式がある(前者が一般的)
- WebAssembly側がJavaScriptで定義したコードや関数を読み出す(エラーメッセージなどの通知を、WebAssemblyからJavaScriptの関数を呼び出して直接指定できるようにする)
- Emscriptenにおいて、WebAssemblyとJavaScriptを両方生成する方式と、WebAssemblyのみを生成してJavaScriptは自力で記述する方式がある(前者が一般的)
- 関数ポインタを用いてWebAssembly側がJavaScriptで定義したコードや関数を呼び出す
- Emscriptenにおいて、WebAssemblyとJavaScriptを両方生成する方式と、WebAssemblyのみを生成してJavaScriptは自力で記述する方式がある(前者が一般的)
実際問題、関数ポインタを用いる方法が最も奇麗な記述になるのだと思う(が、JavaScript側のコードがどんどん複雑になっている気もする)。
この辺は概念だけ理解して、こういう方式があるのか、くらいわかっておけばいいかなと思っている。 実際に使うことがあれば(あるのかわからないけど)、その時に復習すればよかろう。