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を展開してやってます。コンパイラ作るのが面倒くさくて(^^;)<馬鹿