Реализация структурной типизации OCaml, Scala и Go

При исследовании структурной типизации я нашел следующую статью, описывающую как интерфейсы в Go переводятся в таблицы поиска методов во время выполнения. Процесс, описанный в сообщении, кажется значительно отличающимся от рефлексивных и генерирующих методов, описанных для Scala дополнительной структурной системы типов и расширения White Oak языка Java.

Есть ли какие-то подробные ресурсы, которые обсуждают, как структурная типизация реализована в OCaml? Меня особенно интересует любое обсуждение оптимизаций или сопоставлений производительности во время исполнения с системами номинального типа.

Ответ 1

Вы можете найти довольно подробное описание внутренних объектов OCaml в этом сообщении в блоге Джейком Донхэмом. Суть его в том, что поддержка объектов в основном реализована как внутренняя библиотека, причем в самом компиляторе имеется только немного логики (и, конечно, логика ввода текста в типе система), в основном вокруг эффективной отправки сообщений.

Я не эксперт в этой части языка, но после поверхностного осмотра похоже, что OCaml полагается на поиск методов в отсортированном методе (разрешен в слоты в таблице методов), с кешированием для метода называемый последним, и оптимизация статически известных вызовов, в частности, самообъявлений внутри реализации метода. Наконец, некоторые широко используемые функции (например, геттеры и сеттеры переменных экземпляров) распознаются и кодируются специально (введите impl во внутреннюю библиотеку OO), чтобы улучшить производительность и, возможно, что более важно, уменьшить размер кода.