👓

WASM にコンパイルする言語を作った話

に公開

https://github.com/KajizukaTaichi/mystia

動機

Rustのwasm_bindgenは色々と制約が多いのが課題であまり好きではなかった。
かといってAssemblyScriptやEmscriptenを使う気にはなりません。

ということで自分でWebアセンブリ向け言語を作り始めた。
プロジェクト名は「Mystia」と言います(特に深い意味は無い)。

特徴

そこそこ強力な型推論

コンパイル時に厳密に型チェックされ、基本的に注釈は全く無しでも動きます!

image.png

--summaryオプションで型推論の結果を表示できます。

RustやOCamlみたいな文法

というかデザインは完全に私の思想になっています。
関数定義と代入は明示的にletで行い、最後の式はreturn無しでも値を返します。

image.png

コンパイラ

LLVMは使わず、抽象構文木から直接WAT(WebAssembly Text Format)を生成します。
Rustで実装しましたが、いずれはセルフホスティングも出来るようにしたい。

image.png

コード量も割とコンパクトです。

image.png

他言語連携

JavaScriptとのFFI(Foreign Function Interface)も作りました。
型情報を元にWASMのメモリから値を読み込んでいます。

image.png

Playground

インストール不要でブラウザ上で動かせます。
ぜひ試してみてください!

https://kajizukataichi.github.io/mystia/

image.png

目標

制約が少なく自由度の高いWASM向け言語の選択肢となる事を目指しています。
また、今年のU-22プログラミングコンテストに応募予定です。

最後までご覧頂きありがとうございました!

Discussion