Я согласен с первым комментарием, что этот вопрос слишком широк, чтобы на него можно было ответить. Но я все равно попробую.
В вашем вопросе есть несколько аспектов:
- Какова семантика часто используемых концепций объектно-ориентированного программирования?
- Как их можно реализовать в компиляторе?
- Как они обычно реализуются в других компиляторах?
- Какие хорошие ресурсы для дальнейшего обучения?
Семантика
Широко варьируется между языками, а также существует некоторая путаница / противоречие в том, что на самом деле означает ООП (хорошая презентация на эту тему: http://www.infoq.com/presentations/It-Is-Possible-to-Do-OOP-in-Java, в которой также есть несколько примеров реализации функций ООП). Просто выберите одну модель и найдите ссылку, которая определяет семантику, такую как спецификация языка или научная статья о модели.
Javascript, вероятно, является самой простой моделью для реализации, поскольку он очень напрямую отображается на реализацию без значительной части необходимой среды в компиляторе. Статическая версия модели Java (компиляция класса времени компиляции вместо загрузки классов времени выполнения) также не должна быть слишком сложной. Более сложными моделями будут C ++ (который допускает множественное наследование) и Smalltalk или Common Lisp / CLOS (с мета-объектными протоколами).
Возможные реализации
Опять широкий выбор. Так как семантика фиксирована и в основном довольно проста, усилия по реализации наиболее сильно зависят от производительности, которую вы хотите заархивировать, и существующей инфраструктуры вашего компилятора. Сохранение всего в списках и сканирование их для первой записи, которая удовлетворяет правилам, вероятно, является самой простой реализацией.
Обычная реализация
Большинство языков программирования вне области Java / C # / C ++ выполняют статический поиск имени / подписи во время компиляции, чтобы найти определения упомянутых вещей, и используют http://en.wikipedia.org/wiki/Virtual_method_table для разрешения полиморфных вызовов. Они также используют указатель Vtable для instanceof
-чек и для проверки понижений.
Ресурсы
Хотя только 30 страниц непосредственно связаны с объектами, я все же думаю, что Lisp in Small Pieces (LiSP) - отличная книга для обучения работе на этом уровне в компиляторе. Основное внимание уделяется реализации языковых функций, компромиссам в реализациях и объединению частей. (если (вы можете избавиться от используемого синтаксиса) (это здорово)).