Как Smalltalk манипулирует кадрами стека вызовов (thisContext)? - PullRequest
5 голосов
/ 14 июня 2011

Объект Smalltalk thisContext выглядит странно и изумительно. Я не могу понять, что это такое и как это работает. И даже как это позволяет продолжения.

Для стека вызовов C я легко могу представить, как он реализован и работает. Но для этого ... я не могу. Пожалуйста, помогите мне понять это.

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Я думаю, что это не простой вопрос. Стек образ в образе с экземплярами MethodContext. MethodContext может иметь отправителя, который является другим MethodContext. Этот может иметь другой ... генерирующий целый стек. MethodContext создается виртуальной машиной при выполнении CompiledMethod (который также реализован на языке).

Как MethodContext отображается в стек C, это зависит от виртуальной машины. StackVM (CogVM находится над StackVM) - это именно виртуальная машина, которая лучше отображает стек MethodContext con C.

Помимо BlueBook, который сказал Лукас, отметьте

http://www.mirandabanda.org/cogblog/ отметьте слева сообщения ...

Рекомендую спросить у http://lists.squeakfoundation.org/mailman/listinfo/vm-dev

4 голосов
/ 14 июня 2011

Лучшее объяснение вы можете найти в Smalltalk-80: Язык и его реализация , главы 26–30. Фреймы стека (контексты) описаны на стр. 580.

3 голосов
/ 15 июня 2011

Правильнее будет сказать, что thisContext является продолжением, в частности, текущим продолжением.

Представьте себе переменную c, которая непосредственно перед активацией MethodContext, указывает на этот контекст.Это thisContext.

...