VMを作ってみる

趣味と実益をかねて「似非Smalltalkもどき」を作っています。バイトコードSmalltalkバイトコードよりもずーっと単純なやつを。
でも、やっぱり結構Smalltalkを参考にしているといろんなことが見えてきておもしろいです……けど、

Smalltalkにおいては、if文ですらもオブジェクトとメッセージのやりとりでこなす

という、常套句を念頭に置いた上で、「SMALLTALK-80 -THE LANGUAGE AND ITS IMPLEMENTATION-」なんかを読み直したりすると、いきなりバイトコードの解説(P.550)で

origin <= aPoint
  ifTrue: [^aPoint < corner]
  ifFalse: [^false]

(中略)
155 jump ahead 4 bytecodes if the object on top of the stack is false

なんてインラインで展開されててちょっと萎え(^^;)。あー、そうだよね、でも、いちいちBlockContextを使うのはある意味馬鹿だよなぁ。
ちなみに、今作っているVMは律儀にBlockContextを展開してやってます。コンパイラ作るのが面倒くさくて(^^;)<馬鹿