Skip to content

xtuc/inline-wast

Repository files navigation

inline-wast

Inline WebAssembly in your JavaScript

Motivations

The idea is (almost) the same than the built-in asm (or __asm__) function in C. Express your computation using the WebAssembly backend or an interpreter.

WAST is a superset of WATF (.wat) and is not part of the WebAssembly specification but we use it for convenience.

Example

Instructions

const {wastInstructions} = require('inline-wast/lib/interpreter');

function add(a, b) {
  const fn = wastInstructions`
    (i32.const ${a})
    (i32.const ${b})
    (i32.add)
  `;

  return fn();
}

console.log(add(1, 1)); // 2

Function declaration

const {wast} = require('inline-wast/lib/interpreter');

function add(a, b) {
  const exports = wast(`
    (func (export "add") (param $l i32) (param $r i32) (result i32)
      (get_local $l)
      (get_local $r)
      (i32.add)
    )
  `);

  return exports.add(a, b);
}

console.log(add(1, 1)); // 2

Native

If you want to use the native WebAssembly backend the usage remains the same, but you need to use:

const {wastInstructions, wast} = require('inline-wast/lib/native');

It's not recommended for now, the WAST to WASM conversion needs to be refactored.

About

Inline WebAssembly in your JavaScript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages