ブラウザで動く Mere:すべてが収束する場所
五つの Part にわたって建てたあらゆる部品が、人が届ける場所を指していた。四つの live page がセルフホストパイプラインをウェブに載せる:Mere を貼ると整形し、走らせ、型を推論し、あるいは Wasm モジュールを返す —— サーバなし、OCaml なし。ここに新しいものは何もない。それはすべての組み立てだ:Wasm backend、サンドボックス、外部インターフェース、そして言語自身で書かれたコンパイラが収束し、あなたが打ち込むコードをコンパイルするのを見られるコンパイラになる。
セルフホストコンパイラは Mere に存在し、自分自身を吐ける。この Part のすべては、人が実際に届ける どこかで走るために建てられ、各部品は落ちた瞬間にウェブページに配線された。この締めの回は、その ページ —— 四つ —— の話であり、そしてそれらに届くのがまったく新しい発明を要さなかったという事実の話だ。 それらは、この連載のあらゆる Part が一度に配当を払う点だ。
四つのページ
各セルフホスト部品が、建てられた順に live page になった。フォーマッタのページがある:Mere ソースを 貼ると、きれいに整形されて返る。REPL のページ:式を貼ると、走って結果を示す。型検査器の ページ:コードを貼ると、それに推論された型を示す。そしてコンパイラのページ:Mere ソースを貼ると、 WebAssembly モジュールのテキストを返す —— ファイルの上でコンパイラを走らせることの、ファイルなし サーバなしのブラウザ版だ。
四つすべてが同じやり方で走る。それらはセルフホストのレキサ、パーサ、フォーマッタ、評価器、型検査器、 コード生成器 —— 前五回の Mere プログラム —— が WebAssembly にコンパイルされ、ページに読み込まれたものだ。 OCaml は居ない;リクエストはブラウザを去らない。Mere パイプラインが、それが届くよう設計された サンドボックスにコンパイルされて、タブの中でローカルに仕事をする。
ここに新しいものは何もない
これらのページの際立った点は、そのどれほど少しが新しい能力かということだ。それらは、それぞれ自分の 時に、自分の理由で建てられた部品の収束だ。
Part IV の Wasm backend が、セルフホストパイプラインを、ブラウザが読み込める何かにコンパイルする —— サンドボックスのターゲット、当時、ここへ導くからという理由も一部にあって選ばれた。サンドボックス モデルが、パイプラインをページの中で既定で信頼せず走らせ、与えられた import を通してのみ外へ届かせる 理由だ。Part IV の前の方の外部関数インターフェース —— DOM 要素の不透明ハンドル、境界を越えて マーシャルされる文字列、関数テーブルのインデックスとして渡されるイベントハンドラ —— が、コンパイル された Mere を、あなたが打ち込むテキストボックスと結果が現れるパネルに繋ぐ糊だ。そして Part V の セルフホストパイプラインが、走らされているものだ。それらを合わせると、ウェブページ上のコンパイラが 得られる;そのそれぞれが必要で、そのどれ一つとしてここで建てられなかった。この回は建設ではなく組み立て だ、それこそ、よく建てられた部品の連なりが最後に可能にすべきものだ。
おもちゃの式でなく、本物のプログラム
これらのページを通って走るものは、一行ものに限られない。本物のプログラムがブラウザのセルフホスト コンパイラを端から端まで通る:FizzBuzz、リストをソートする quicksort、JSON レンダラ、Brainfuck インタプリタ、正規表現エンジン。その最後の対は味わう価値がある —— Brainfuck インタプリタはそれ自身が 小さな言語実装だから、ブラウザは、それがコンパイルする言語で書かれたコンパイラによってコンパイルされた インタプリタを、走らせている。メタ循環とブートストラップの回で抽象的だった自己参照の塔が、ここで 具体的でクリック可能になる:あなたが貼ると、Mere のコンパイラ —— それ自身 Mere からコンパイルされた —— があなたのプログラムを、目の前で Wasm に変える。
正直な scope を視界に保つ価値がある、カバレッジ台帳が言い張るように。これらのページで走るパイプラインは Mere の古典的な関数的コアだ —— パース、Hindley–Milner 型、評価、そしてそのコアのためのコード生成。 Mere を特徴づける解析 —— 借用モード、region、エフェクトシステム —— は、まだ OCaml リファレンスが検査し、 まだセルフホストされていない。ページは言語の心臓部を走らせる、セルフホストされ byte 検証されて;まだ その全部は走らせず、どれがどれかを言うことが、物語をまっすぐ語ることの一部だ。
技術的アークの終わり
これで、連載の技術的な背骨が完成する。五つの Part にわたって言語は、思想と最小コア、明示的なメモリ モデル、明示的なエフェクトシステム、厳密な一致に保たれた四つの backend へのコード生成、そして最後に、 自分自身で書かれブラウザで走るコンパイラを獲得した。それは自分自身のソースを読み、検査し、走らせ、 コンパイルする —— そしてその最後を、あなたの目の前で、開けるページの上でやる。ドキュメントサイトと セルフホストの取り組み全体を動機づけた主張 —— Mere は実際に作れる言語だ —— は、いまや信仰で受け取る ものではなく、クリックできるものだ。
物語に残るのは、さらなる機構ではなく、世界への通路だ。動く言語は、まだ誰かが使う言語ではない;それは 何かを意味する名前、住む場所、アイデンティティを要する。次の Part は、その渡りについてだ —— 言語が結局 何と呼ばれることになったか、そして私的な実験であることをやめ公のものになるのに何が要ったか。次、 Part VI が開く:名前「Mere」、そして公開。