В настоящее время я ищу различные способы реализации динамической диспетчеризации.
Насколько я знаю, есть два "простых" способа реализовать это:
- Таблицы виртуальных функций, как в C ++
- Диспетчер сообщений, как в SmallTalk (что несколько похоже на идею Python хранить методы в качестве атрибутов в
__dict__
)
Я бы отметил, что насколькоЯ знаю, что VFT были выбраны потому, что они работали разумно и легко для реализации (а также потому, что они хорошо подходили для отдельной модели компиляции C ++), а не потому, что они были самыми быстрыми возможными методами.
Я уже прочитал пару статей и публикаций, однако большинство из них являются «старыми» (последние, которые я прочитал (*), упомянул, используя Pentium 200 МГц ... гул), поэтому я сомневаюсь, что они представляют состояние-арт, если исследования не пришли в стойло.
Меня интересуют:
- Стратегии динамической отправки, тем лучше, если они поддерживают мульти-методы.
- Тесты различных стратегий
Меня особенно интересуют последние статьи и необычные стратегии (даже если они не доказали свою эффективность).
Публикации приветствуются, было бы лучше, если бы они были в свободном доступе, ив противном случае краткое изложение представленной техники и результат будут отличными.
Технические статьи реальных реализаций компилятора также приветствуются.
(*) Эта статья о Eiffel иллюстрируетКак анализ всей программы может помочь удалить сайты виртуальных вызовов.