65
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-03-29

動機

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

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

image.png

目標

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

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

65
25
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?