Как найти текущий стек?
-
21-09-2019 - |
Вопрос
в Pharo, как я могу найти оцениваемый в данный момент стек?
Решение
Ну, на самом деле, проблема не так проста: thisContext
может быть довольно дорогостоящей операцией по сравнению с отправкой подобного сообщения.
В Visualworks Smalltalk доступ к стеку - это внешне дорого, потому что он использует собственный C-стек и, следовательно, любой доступ к thisContext
должен преобразовать весь C-стек в причинно связанный Объекты Smalltalk.То есть для каждого фрейма стека C должен быть создан объект Smalltalk (включая возможную деоптимизацию JIT), и, кроме того, все изменения в этих объектах должны быть отражены обратно в стек C.
В Pharo (и Squeak, если уж на то пошло) это менее неудобно, поскольку он использует объекты Smalltalk для стека.Но все же пул объектов, который кэширует кадры стека, сбрасывается при каждом вызове.(Да, за исключением, например, Java, объединение объектов в пул действительно повышает производительность в Squeak ...добро пожаловать обратно в 90-е :)
Другие советы
Вы оцениваете
thisContext contextStack
Здесь, thisContext
на самом деле это специальная переменная, которая указывает на текущий активный фрейм стека.Тогда, contextStack
возвращает массив со всем стеком.