WebAssemblyはWebブラウザ上のみならず、ユニバーサルバイナリとして様々な環境で実行できるようになっています。WebAssemblyはバイナリだけでなく、テキスト形式にもでき、S式として可読性も多少あるフォーマットです。 そこで作られたのがwasm2ktです。WebAssemblyを読み込み、kotlinおよびJavaに変換するソフトウェアです。

wasm2ktの使い方

最初にC言語からWebAssemblyにします。

echo -e "#include <stdio .h>\nint main() { printf(\"hello world\\\n\"); for (int n = 0; n < 10; n++) printf(\"%d,\", n); printf(\"\\\n\"); return 0; }" > hello.c
docker run --rm -v $(pwd):/src -t apiaryio/emcc:1.37 emconfigure emcc hello.c -o hello -O3 -s WASM=1

次にWebAssemblyからKotlinにするのですが、ここ(./wasm2kt.kts hello.wasm >> hello.kt)でエラーが出てしまいました。

echo '#!/usr/bin/env kscript' > hello.kt
cat src/main/kotlin/com/soywiz/wasm/WasmModule.kt >> hello.kt
./wasm2kt.kts hello.wasm >> hello.kt
echo -e "fun main(args: Array<string>) = Module.main(args)" >> hello.kt
chmod +x hello.kt

本来であれば生成されたKotlinファイルを実行できる仕組みです。KotlinやJavaの中でWebAssemblyを実行するのも良いですが、コードにすることでIDEなどで読み込んで入力補完が使えるのもまた便利です。こういったプログラミング言語が融合して垣根がなくなっていくのは面白いです。

wasm2ktはWebAssembly/Kotlin製のオープンソース・ソフトウェア(ソースコードは公開されていますがライセンスは明記されていません)です。

soywiz/wasm2kt: Web Assembly to Kotlin and Java converter. Allows to compile a C or C++ program/library, and generate a Kotlin or Java program/library.