Arantium Maestum

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

wasm GC Proposalのために作られた実験的な関数型言語処理系Wamlが面白そう

自分で実装している型システムに再帰型をつけたくてiso-recursive typesで検索していたらwasm garbage collectorのGitHubレポジトリで行われている侃侃諤諤な議論を見つけて読み漁っていた。

その中で見つけたのがwasmの中心的な人物であるAndreas RossbergがwasmのGC proposalを試すために書いた実験的なコンパイラWaml:

github.com

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に従って実装をはじめる段階)に到達したことが発表された:

というわけで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の使い方としても、学ぶものが多そうなコードである。