wasm GC Proposalのために作られた実験的な関数型言語処理系Wamlが面白そう
自分で実装している型システムに再帰型をつけたくてiso-recursive typesで検索していたらwasm garbage collectorのGitHubレポジトリで行われている侃侃諤諤な議論を見つけて読み漁っていた。
その中で見つけたのがwasmの中心的な人物であるAndreas RossbergがwasmのGC proposalを試すために書いた実験的なコンパイラWaml:
Rossbergはwasmのreference interpreterを実装したりしている。ML界隈ではF-ing Modulesや1MLなどのモジュール関連の研究やstandardにできるだけ忠実なSMLのレファレンス実装HaMLetなどで有名。
このWamlはwasmのGC proposalがちゃんとした言語処理系のコンパイル先として必要な機能を備えているか評価するために、できるだけ関係ありそうなML系言語の機能を持ち、できるだけ多くのGC機能を使うことを意図して作られた言語仕様とコンパイラ・インタプリタなようだ。
READMEから引用すると:
... Waml is a complete implementation of an ML dialect, providing all major features of the ML family of languages:
primitive data types
functions, closures, and currying
algebraic data types and pattern matching
references
polymorphic type inference
higher-order modules and sealing
compilation units with separate compilation and client-side linking
とのこと。
この言語のコンパイラ・インタプリタをOCamlで実装しており、コンパイラのターゲット言語は(まだ公式とはなっていない)GC付きのwasmだ。
ちなみに10月末でwasmのGC proposalはphase 3(各ブラウザがproposalに従って実装をはじめる段階)に到達したことが発表された:
Wasm GC advanced to phase 3 today at the in-person WebAssembly Community Group meeting in SF. All three browser engines have implementations underway and there are only a few small design questions left, so momentum looks good as we move toward standardizing the proposal.
— Thomas Lively (@tlively52) October 27, 2022
というわけでWamlは、実用的とはいわないまでもかなり精緻なML言語の諸機能を備えたプログラミング言語(代数的データ型などはもちろん、F-ing Modules準拠のfirst class modulesも含むモジュール機能まである)の、wasmに近い将来導入されることが見越されているGC機能を利用したコンパイラを、そのGC機能開発を担当している専門家でML言語研究でも著名なRossbergが実装したものとなる。
懸念としては、最後にmainブランチからマージされたのが2022年2月なので最終的なwasm GC proposalと多少乖離している恐れがあるところで、実際に使って試してみたいところではある。
Consequently, it can run in any Wasm environment supporting the GC proposal.
とあるが現在そのenvironmentを確保するにはどうするのが最善なのだろうか。ここら辺は要確認。
ともあれ、ML言語の実装としても、wasm GCの使い方としても、学ぶものが多そうなコードである。