psyche - コンパイルしてWebAssemblyを生成する専用言語
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