読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

Smalltalk処理系製作日記

というわけでSmalltalk処理系制作に再挑戦したいと思います。

前にもJSでバイトコードインタプリタ(っぽいもの)だけ書いたり、オブジェクトメモリとGCとテストだけ書いたりしたんですが、その後のパーサが面倒で挫折していました。

振り返ってみると、

  1. パーサを書くのが単純に面倒
  2. ASTをどういう形で作成するかの判断基準となる、バイトコードの仕様が曖昧

あたりが原因かな、と思います。

というわけで1を解消するためにPharoでPetitParserを使い構文の解析だけ先に済ませました。

github.com

PetitParser、特にCompositeパーサーはものすごく便利で、先にGrammarだけ作って継承でそのツリーを操作、というシンプルな設計ができるため楽になりそうです。将来的には同じような仕組みのパーサコンビネータをクラスライブラリに入れて、この実装を元にコンパイラを書くと楽そうです。

次に必要なのはバイトコード仕様を固めることですが、これはLittleSmalltalkを参考にほぼそのまま実装することにします。バイトコードを効率化していく過程も楽しそうです。

バイトコードインタープリタを書く前に必要なので、次はオブジェクトメモリに取り掛かります。GCのバグ取りで心がやられないか心配ですが、まあCopyGCなら何回か書いているのでそろそろ慣れてきた頃でしょう。そう信じたい。ほな、また……。

広告を非表示にする