Вопрос

в Pharo, как я могу найти оцениваемый в данный момент стек?

Это было полезно?

Решение

Ну, на самом деле, проблема не так проста: thisContext может быть довольно дорогостоящей операцией по сравнению с отправкой подобного сообщения.

В Visualworks Smalltalk доступ к стеку - это внешне дорого, потому что он использует собственный C-стек и, следовательно, любой доступ к thisContext должен преобразовать весь C-стек в причинно связанный Объекты Smalltalk.То есть для каждого фрейма стека C должен быть создан объект Smalltalk (включая возможную деоптимизацию JIT), и, кроме того, все изменения в этих объектах должны быть отражены обратно в стек C.

В Pharo (и Squeak, если уж на то пошло) это менее неудобно, поскольку он использует объекты Smalltalk для стека.Но все же пул объектов, который кэширует кадры стека, сбрасывается при каждом вызове.(Да, за исключением, например, Java, объединение объектов в пул действительно повышает производительность в Squeak ...добро пожаловать обратно в 90-е :)

Другие советы

Вы оцениваете

thisContext contextStack

Здесь, thisContext на самом деле это специальная переменная, которая указывает на текущий активный фрейм стека.Тогда, contextStack возвращает массив со всем стеком.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top