WebAssembly ツアー 目次

テキストの読み込み

次は、その反対の考え方をしてみます。WebAssemblyのプログラムに、テキストを渡したい場合です。

次のような流れになります。

  1. 渡したいテキスト(バイト列)の長さを求める
  2. その長さの分だけメモリを確保する
  3. 開始位置を指定して、確保したメモリにバイト列をコピー
  4. WebAssemblyのプログラムに、特定の位置と長さでデータを渡したことを知らせる

これがその初期化の例です。

// 文字列"Ferris"をバイト列に
const utf8enc = new TextEncoder("utf-8");
let text = "Ferris";
let text_bytes = utf8enc.encode(text);

// そのための領域を確保
let len = text_bytes.length;
let start = module.instance.exports.wasm_malloc(len);

// WebAssemblyのメモリに配置
let buffer = module.instance.exports.memory.buffer;
let memory = new Uint8Array(buffer);
memory.set(text_bytes, start);

// プログラムを実行
module.instance.exports.main(start,len);