55
22

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」と言います(特に深い意味は無い)。

特徴

そこそこ強力な型推論

コンパイル時に厳密に型チェックされ、関数の引数以外は注釈無しで動きます!
戻り値の型書かなくて良い分ひょっとするとRustより強いんじゃないか?

image.png

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

ML系みたいな文法

RustとOCamlを足して2で割ったような文法です。
というかデザインは完全に私の思想になっています。
関数定義と代入は明示的にletで行い、行末にセミコロンを付けないと値を返します。

image.png

コンパイラ

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

image.png

Playground

インストール不要でブラウザ上で動かせます!

image.png

目標

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

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

55
22
1

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
55
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?