Pharo で、現在評価中のスタックを見つけるにはどうすればよいですか?
2 に答える
あなたが評価する
thisContext contextStack
は、thisContext
現在アクティブなスタック フレームを指す特別な変数です。次に、contextStack
スタック全体の配列を返します。
実際、問題はそれほど単純thisContext
ではありません。メッセージの送信などに比べて、非常にコストのかかる操作になる可能性があります。
Visualworks Smalltalk では、スタック アクセスはネイティブ C スタックを使用するため、非常にコストがかかります。したがってthisContext
、C スタック全体を因果的に接続されたSmalltalk オブジェクトに具体化する必要があります。つまり、各 C スタック フレームに対して Smalltalk オブジェクトが作成され (可能な JIT 最適化解除を含む)、さらにこれらのオブジェクトへのすべての変更が C スタックに反映される必要があります。
Pharo (さらに言えば Squeak) では、スタックに Smalltalk オブジェクトを使用するため、それほど厄介ではありません。ただし、スタック フレームをキャッシュするオブジェクト プールは、呼び出しごとにフラッシュされます。(はい、例えば Java 以外では、オブジェクトをプーリングすると Squeak のパフォーマンスが向上します... 90 年代へようこそ :)