Arantium Maestum

プログラミング、囲碁、読書の話題

wamlのコードを読んでる

Andreas RossbergがwebassemblyのGC proposalを試すために作ったミニML言語waml。以下の記事で紹介した:

zehnpaard.hatenablog.com

それからもちょこちょこと眺めていたのだが、

と、見れば見るほどちゃんと勉強したいと考えるようになった。というわけでコードリーディング中。

現状ではwasm自体はそこまで興味があるわけではなく、どちらかというとASTなどの内部表現と型推論まわりをどう実装しているのかが一番知りたいポイントなのでそこら辺を重点的に(写経も含めて)読んでいる。

コードはここ:

github.com

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関係なしに実行するインタプリタ

wasmへのコンパイル関係

  • compile
  • emit
  • intrinsics
  • lower
  • link

wamlコードをコンパイル・実行する

  • main
  • run
  • runtime

他諸々

  • arrange
  • flags

のように分類できると思う(かなり大まかかつ私見のみな分類であることに注意)。

とりあえず「各種内部表現と意味解析」の部分を現在読みはじめたところ。