簡単な自作言語のコンパイラ vm2gol v2 の製作過程

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話 の製作過程を雑にダラダラ書きます。

  • 下書きっぽいものは用意しているので、打ち切りにならずに完走はできると思います(2019-10-05 完走しました!)
    • 予定では全38回
    • 時間や気力不足などで 1ヶ月更新が止まるとかはあるかもしれません
  • 教科書的な正しさは保証できませんし、自分用のふりかえりメモみたいな体でやります
    • なので、文体は丁寧でも説明は全然足りてないと思います
  • 最初に作ったもの(v1)と全く同じではなく、微妙に違うものになります
    • 試行錯誤した過程を全部そのまま書くとさすがに退屈・煩雑になるので多少整理したり
      • あと、作って時間が経ってるので細かいところは覚えてない
    • あまり大きく変えない程度に改良したり(2周目なので)
  • 私はあれこれ悩みながら2週間かけて作りましたが、 単純に書き写すだけなら1週間もかからないんじゃないかと思います
    • なので、「コンパイラ作ってみたいけど何ヶ月もかかるような本格的なのはちょっと無理そう……」 と思っていたり、実際やってみて挫折した、というような昔の自分みたいな人の役に立てたらいいなあ、という気持ちがあります

リポジトリ

github.com

目次

VMアセンブラは飛ばしてコンパイラっぽい部分から見たいという場合は「16. 簡単なコード生成」あたりから見てください。

VM

アセンブラ

コード生成

このあたりで最低限必要なものは大体出揃っていて、以降は肉付けやバグ修正をしながらライフゲームを書いていく作業になります。

ライフゲームの実装開始

ここまでできた時点で RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話 を書きました。

ライフゲームが動いた後の修正

以下は完成後の追加の修正。おまけコーナーです。

さらにその後

ここから先はちびちびとリファクタリングしたりフォーマットをいじってみたり。増えてきたのでページを分けました。