Smalltalk(Squeak/VisualWorks/etc.)総合スレ
■ このスレッドは過去ログ倉庫に格納されています
0485478
NGNGCompiler evaluate: '3 + (Compiler evaluate: ''4'')'
のような式をワークスペースから評価したとき、外側のevaluate:をコンパイ
ルして動的リンクして呼ぶ「処理系1(UIトップレベル)」があるわけでしょ。
その「処理系1」は内側のevaluate: をコンパイルして動的リンクして呼ぶ
「処理系2(.so内のコンパイルされたコード)」とは「違う」んだよね、きっと。
その場合、例えば'4' の代わりにもっと複雑な式が来て、'3 + 'の代わりの複
雑な式のところで変更されたメソッドを呼んでいたりしたら、内側のやつが使
うべき(例えば)メソッドルックアップのロジックはどの処理系のものになるの
か、と言うような話。
で、JIT的というのは中間コードのセマンティクスを保って動くVMがあるけ
ど、実際にCPUが実行しているコードはVMが動的に変換したコードであるよう
なもののつもり。この場合、(例えば)メソッドルックアップが必要になったら、
いつも同じVMが持っているロジックを使う。.soとかじゃないから、動的に変
わっているかもしれない.soの外へのコールバックをどうするか、と言う問題
を考えなくて良くなる。
最初の例のように.soを作るとしても、理屈の上では細切れな.soを作っ
て、動的ディスパッチの飛び先とかもちゃんと管理して、「常にどれかの.so
の中で動いているけど、Smalltalkのセマンティクスを保って動く」という処
理系も作れるかもしれない。でも、それをあなたは「ネイティブコンパイルし
たものが動いている」と呼ぶのかな、と言う疑問は残るけどね。
■ このスレッドは過去ログ倉庫に格納されています