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

私に教えられることなら

SqueakのVMConstructor探検メモ

Squeakみたいに、Smalltalk VMをサブセット(Slang)で書いて楽しみたいという野望があるんですが、最近の(Cog)VMの生成周りはどういう設計なのかさっぱりわかりません。

というわけで主にボイラープレートをどうやっつけてるかが知りたいんですが、まずビルドすらできません。

諦めてCog VMについてはいつか詳細なドキュメントにまとめられるのを期待して、とりえあず最初の方のSqueakのコードを覗いてみることにします。Squeak v2系列のv2.8がサクッと動いたのでそれを見てみます。

v2.8のディレクトリを見てみると、ReadMeSmalltalk discardVMConstructionVM作成キットが削れると書いてあります。

Smalltalk classをinspectなどしてVM-Constructionパッケージがあるとわかったので見てみます。Interpreterクラスはシミュレータのようです。CCodeGeneratorがあやしい。

CCodeGeneratorのクラスコメントを見ると、Interpreter translate: 'interp.c' doInlining: trueというそのものなサンプルコードが見つかります。

実行するとVMと同じディレクトリに大量のシーゲンゴのファイルが生成されました。interp.cと照らし合わせながら調べて、現時点でのわかったこと・推測は

これがボイラープレート対策の1つでしょうか。構文でどうこうするより、データ駆動でやった方が良さそう、と思っていたので安心しました。

トランスレータについては、ParserまでSmalltalk用のものを使って、生成用のASTクラスを置き換えてるんでしょうか? 次はここらへんを調べます。

それからWindowsだと、ウィンドウを非アクティブにすると、再びアクティブにするとき固まります……。Linuxの方は、/usr/local/binsqueakとしてインストールするやり方みたいです……。ウーム……

広告を非表示にする