动态调度实现

时间:2011-05-10 08:16:53

标签: language-agnostic compiler-optimization compiler-theory dynamic-dispatch

我目前正在寻找各种方法来实施动态调度。

据我所知,有两种“简单”的方法可以实现这一点:

  • 虚拟功能表,如C ++
  • Message Dispatcher,就像在SmallTalk中一样(有点类似于Python在__dict__中将方法存储为属性的想法)

我会注意到,据我所知,VFT之所以被选中是因为它们的表现合理且易于实现(并且因为它们非常适合C ++单独的编译模型),而不是因为它们是最快的可能的方法。

我已经阅读了几篇文章和出版物,但大多数都是“旧的”(最后我读过(*)提到使用Pentium 200MHz ......哼),所以我怀疑它们代表的是状态除非研究来到一个摊位。

我感兴趣的是:

  • 动态调度策略,如果它们支持多种方法,效果会更好。
  • 各种策略的基准

我对最近的文章和不寻常的策略特别感兴趣(即使它们没有证明有效)。

欢迎出版物,如果它们是免费提供的话会更好,否则所提出的技术摘要会很好。

也欢迎真正的编译器实现的技术文章。

(*)This article about Eiffel说明了整个程序分析如何帮助删除虚拟呼叫站点。

1 个答案:

答案 0 :(得分:4)

在阅读有关基于原型的对象系统的实现时,我遇到了以下多方法策略。它是以该域名编写的,但要适应更传统的基于类的语言并不困难。

第3节详述了它,图5是一个有用的图表。我们的想法是,可以调度的每个对象(或者类)都有自己的方法表。 (从这个意义上说,它可以与C ++相媲美。)将调度该对象(或类)的每个方法放入表中。聪明的部分是表格被分成子部分,这些子部分对应于参数位置。

澄清一下:假设你有一个方法专门用于第一个参数的类“Foo”,而第二个参数的类是“Quux”。类Foo的调度表的第1部分将包含指向该方法的指针。并且,类Quux的调度表的 two 部分也将具有指向该方法的指针。然后,要进行调度,请参阅参数“类”调度表。如果方法指针匹配(如我们的示例中所示),那就是要调用的方法。

该论文被称为“具有多个调度的原型”。 http://lee.fov120.com/ecoop.pdf