我目前正在寻找各种方法来实施动态调度。
据我所知,有两种“简单”的方法可以实现这一点:
__dict__
中将方法存储为属性的想法)我会注意到,据我所知,VFT之所以被选中是因为它们的表现合理且易于实现(并且因为它们非常适合C ++单独的编译模型),而不是因为它们是最快的可能的方法。
我已经阅读了几篇文章和出版物,但大多数都是“旧的”(最后我读过(*)提到使用Pentium 200MHz ......哼),所以我怀疑它们代表的是状态除非研究来到一个摊位。
我感兴趣的是:
我对最近的文章和不寻常的策略特别感兴趣(即使它们没有证明有效)。
欢迎出版物,如果它们是免费提供的话会更好,否则所提出的技术摘要会很好。
也欢迎真正的编译器实现的技术文章。
(*)This article about Eiffel说明了整个程序分析如何帮助删除虚拟呼叫站点。
答案 0 :(得分:4)
在阅读有关基于原型的对象系统的实现时,我遇到了以下多方法策略。它是以该域名编写的,但要适应更传统的基于类的语言并不困难。
第3节详述了它,图5是一个有用的图表。我们的想法是,可以调度的每个对象(或者类)都有自己的方法表。 (从这个意义上说,它可以与C ++相媲美。)将调度该对象(或类)的每个方法放入表中。聪明的部分是表格被分成子部分,这些子部分对应于参数位置。
澄清一下:假设你有一个方法专门用于第一个参数的类“Foo”,而第二个参数的类是“Quux”。类Foo的调度表的第1部分将包含指向该方法的指针。并且,类Quux的调度表的 two 部分也将具有指向该方法的指针。然后,要进行调度,请参阅参数“类”调度表。如果方法指针匹配(如我们的示例中所示),那就是要调用的方法。
该论文被称为“具有多个调度的原型”。 http://lee.fov120.com/ecoop.pdf