FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

冬休み読書日記2024: ハンズオンWebAssemblyに入門する (2)

前回の入門: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側のコードがどんどん複雑になっている気もする)。

この辺は概念だけ理解して、こういう方式があるのか、くらいわかっておけばいいかなと思っている。 実際に使うことがあれば(あるのかわからないけど)、その時に復習すればよかろう。