В ППП нет классов. warrior/worker/mage - это просто структуры без поведения. attack<Warrior attacker, Archer target>(); - это не метод Warrior, и не метод Archer, а свободая функция. Она может лежать в любом файле
Минус в том, что нельзя открыть файл с этой структурой и увидеть всё, что эта структура умеет. Но это решается поиском в IDE
Не виртуальные таблицы, а локальные индексные. В объекте лежит не указатель на таблицу, а признак специализации(целое число, индекс). Таблицы принадлежат не типам, а обобщающим функциям. Для мультиметода таблица многомерная. Как это реализовано в PPC описано в статье в разделе 3 (Отображение процедурно-параметрических конструкций в низкоуровневое представление).
Неточно выразился. На этапе компиляции проверяются связь специализаций с обобщением и уникальность специализаций.
Спасибо за обсуждение. Технических деталей правда мало, так как статья изначально планировалась обзорной. Если будет интерес к теме со стороны читателей, можно будет написать статью с разбором технических деталей и осветить все вопросы, которые всплывут в комментариях к этой статье. В том числе подробнее сравненить компилятор с C++ библиотекой. Если есть интерес прямо сейчас - можно почитать здесь.
Про шаблоны соглашусь. Тогда разница в том, кто ведёт таблицу, разработчик или язык. По проверке. Реализация проверок осуществляется во время компиляции. Пока таблица собирается целиком и проверяется на пропущенные пары при запуске, тоже перед main. Так получается из-за раздельной компиляции. В планах перенести сборку таблицы в свой компоновщик.
В ППП нет классов. warrior/worker/mage - это просто структуры без поведения.
attack<Warrior attacker, Archer target>(); - это не метод Warrior, и не метод Archer, а свободая функция. Она может лежать в любом файле
Минус в том, что нельзя открыть файл с этой структурой и увидеть всё, что эта структура умеет. Но это решается поиском в IDE
Не виртуальные таблицы, а локальные индексные. В объекте лежит не указатель на таблицу, а признак специализации(целое число, индекс). Таблицы принадлежат не типам, а обобщающим функциям. Для мультиметода таблица многомерная.
Как это реализовано в PPC описано в статье в разделе 3 (Отображение процедурно-параметрических конструкций в низкоуровневое представление).
Неточно выразился. На этапе компиляции проверяются связь специализаций с обобщением и уникальность специализаций.
Спасибо за обсуждение. Технических деталей правда мало, так как статья изначально планировалась обзорной. Если будет интерес к теме со стороны читателей, можно будет написать статью с разбором технических деталей и осветить все вопросы, которые всплывут в комментариях к этой статье. В том числе подробнее сравненить компилятор с C++ библиотекой. Если есть интерес прямо сейчас - можно почитать здесь.
Про шаблоны соглашусь. Тогда разница в том, кто ведёт таблицу, разработчик или язык.
По проверке. Реализация проверок осуществляется во время компиляции. Пока таблица собирается целиком и проверяется на пропущенные пары при запуске, тоже перед main. Так получается из-за раздельной компиляции. В планах перенести сборку таблицы в свой компоновщик.