Вопрос

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

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

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

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

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

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

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

Решение

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

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