この記事はWebAssembly Advent Calendar 2018の21日目です。wasm-bindgenを使用して何かしてみたいと思っていたので、今回は以前Rustで実装した画像の差分を取るツールをwasm-bindgenを使用してnode_modulesとして使用できるようにしてみたいと思います。 adventar.org 移植元 github.com これはもともと、go-diff-image(https://github.com/murooka/go-diff-image)というgolang製のツールをRustへポーティングしたものになります。 github.com 同じピクセル同士を比較して差分を出力するのではなく、githubのdiffのような感じで画像の差分を可視化するツールです。 以下のような比較画像を生成します。 成果物 github.com 手順 さっそくミニマ
概要 WebAssemblyを使ってJavaScriptからRustの関数を使うときの話 JavaScript<->Rustのデータのやり取りをする方法をまとめました。 数値、String、Arrayで書き方が違うみたいです。 github.com 参考にしたページ https://sbfl.net/blog/2017/03/13/rust-wasm/ 全体的なWebAssemblyの動かし方について参考にさせていただきました。 http://stackoverflow.com/questions/24145823/rust-ffi-c-string-handling Stringの受け渡しについて参考にさせていただきました。 http://qiita.com/shizu-oka/items/d386001b45f5cd2aacab Arrayの受け渡しについて参考にさせていただきました。
Wasm とホスト間での関数呼び出しでは数値しか受け渡すことができないので、文字列や配列をやり取りするときには wasm インスタンスのメモリを経由する必要がある。例えば文字列をホスト(JavaScript)から wasm に渡したいときは一度 wasm インスタンスのメモリ領域に文字列を書いてから、書いた場所のアドレスとサイズを関数に渡す。これは数値以外の情報をやり取りする場合は wasm 側にメモリアロケータが必要であることを意味している。 Rust が生成する wasm がメモリ割り当てをどうやっているのかを調べて、自分でナイーブなアロケータを作るところまでやったので、その過程で理解したことをエントリにしておこうと思う。 ここではホスト環境としてブラウザ(JavaScript)を想定している。また wasm のインスタンス化の際にはメモリを import せず wasm 内で管理する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く