Динамическое связывание с объектами smalltalk - PullRequest
0 голосов
/ 25 декабря 2008

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

Передача сообщений сама по себе так же проста: сообщение с селектором отправляется объекту, объект выбирает метод, соответствующий селектору из своего протокола, затем обрабатывает данные, связанные с сообщением, и возвращает результат.

В реализациях на основе изображений можно реализовать передачу сообщений очень простым способом - ваши селекторы сообщений могут быть просто целыми числами, переведенными из глобальной таблицы символов, ваши протоколы могут быть просто хеш-таблицами с целыми числами и адресами в них. Предполагая, что все это скомпилировано в одно большое изображение с этой глобальной таблицей символов.

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

Есть один способ, и он включает в себя копирование протоколов и таблицы селекторов для процесса, чтобы правильно их переместить. Но это звучит как большая работа.

Есть ли лучшие способы решить эту проблему? Кроме того, стоит ли динамическое связывание? Как я могу реализовать перемещение для селекторов и протоколов?

1 Ответ

0 голосов
/ 03 апреля 2009

Конечно, вы можете принять глобальную таблицу символов, вам просто нужно обновить ее и убедиться, что коды используют только экземпляры символов из этой таблицы. Вы смотрели на Squeak? Код загрузки находится на уровне изображения (не виртуальной машины), поэтому его легко просматривать с любого изображения Squeak.

...