WebAssemblyはプログラミング言語ではなく、様々な言語から生成されるWebブラウザ上で動作するバイナリフォーマットです。CやC++、Rustで書くのが基本ですが、GoやJava、C#など多彩な言語からWebAssemblyを生成できます。 今回紹介するのはpsycheという専用言語で、OCamlで実装されています。

psycheの使い方

例えばフィボナッチ数を求める場合は次のように記述します。

pub fn main() {
  fib(7)  (* => 13 *)
}

fn fib(n) {
  if n == 0 || n == 1
    then n
    else fib(n - 1) + fib(n - 2)
}

そして、このスクリプトをコンパイルすると out.wasm というファイルが生成されます。

psyche make example.psy

out.wasmを実行する場合は以下のようなJavaScriptでできます。

WebAssembly.instantiateStreaming(fetch('out.wasm'), {})
.then(results => {
  console.log(results.instance.exports.main());
});

このJavaScriptで確かに13という結果が得られます。WebAssemblyは高速なので40程度のフィボナッチ数でも高速に結果が返ってきます。psycheの言語仕様はこちらにあります。引数はありますが、文字列はまだ扱えないようです。今後に期待したいソフトウェアです。

psycheはOCmal製のオープンソース・ソフトウェア(MIT License)です。

0918nobita/psyche: A WASM friendly lightweight programming language implemented in OCaml