wamlのコードを読んでる
Andreas RossbergがwebassemblyのGC proposalを試すために作ったミニML言語waml。以下の記事で紹介した:
それからもちょこちょこと眺めていたのだが、
考えれば考えるほどwamlは(wasmとは関係なく)すごいな。正格評価なラムダ計算ベースのコア言語、代数的データ型、パターンマッチ、型推論、モジュールやファンクタとまさにML言語の本質っぽいところがつまったミニ言語だ
— zehnpaard (@zehnpaard) November 26, 2022
と、見れば見るほどちゃんと勉強したいと考えるようになった。というわけでコードリーディング中。
現状ではwasm自体はそこまで興味があるわけではなく、どちらかというとASTなどの内部表現と型推論まわりをどう実装しているのかが一番知りたいポイントなのでそこら辺を重点的に(写経も含めて)読んでいる。
コードはここ:
webassemblyのGCレポジトリのwamlブランチのディレクトリの一つとして存在している。サブディレクトリとして
js
- 生成されたwasmを実行するための非常に簡単なJavaScriptコードsrc
- 言語処理系の中身。OCamlで書かれているtest
- wamlの言語機能のテスト。ほぼすべてwamlそのもので書かれている
がある。wamlの言語機能がどのように使われるのかを知るならtest、実装の内容を知りたいならsrcを見るべき。(まあここら辺は普通だ)
srcの内容としては
字句・構文解析関係
- lexer
- parse
- parser
各種内部表現と意味解析
- env
- prelude
- scc
- source
- syntax
- type
- typing
wasm関係なしに実行するインタプリタ
- eval
- value
wasmへのコンパイル関係
- compile
- emit
- intrinsics
- lower
- link
wamlコードをコンパイル・実行する
- main
- run
- runtime
他諸々
- arrange
- flags
のように分類できると思う(かなり大まかかつ私見のみな分類であることに注意)。
とりあえず「各種内部表現と意味解析」の部分を現在読みはじめたところ。