Language agnostic 动态调度实现

Language agnostic 动态调度实现,language-agnostic,compiler-optimization,compiler-theory,dynamic-dispatch,Language Agnostic,Compiler Optimization,Compiler Theory,Dynamic Dispatch,我目前正在寻找各种方法来实现动态调度 据我所知,有两种“简单”的方法来实现这一点: 虚拟函数表,如C中的++ 消息分派器,如SmallTalk(这有点类似于Python将方法作为属性存储在\uuu dict\uu中的想法) 我注意到,据我所知,VFT之所以被选中是因为它们的执行是合理的,而且易于实现(而且因为它们非常适合C++独立编译模型),而不是因为它们是最快的可能的方法。 我已经读过几篇文章和出版物,但是大多数都是“老的”(我上次读的(*)提到使用奔腾200MHz…哼哼),所以我怀疑它们

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

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

  • 虚拟函数表,如C中的++
  • 消息分派器,如SmallTalk(这有点类似于Python将方法作为属性存储在
    \uuu dict\uu
    中的想法)

我注意到,据我所知,VFT之所以被选中是因为它们的执行是合理的,而且易于实现(而且因为它们非常适合C++独立编译模型),而不是因为它们是最快的可能的方法。 我已经读过几篇文章和出版物,但是大多数都是“老的”(我上次读的(*)提到使用奔腾200MHz…哼哼),所以我怀疑它们是否代表了最先进的技术,除非研究结果被搁置

我对以下方面感兴趣:

  • 动态调度策略,如果支持多种方法就更好
  • 各种战略的基准
我特别感兴趣的是最近的文章和不同寻常的策略(即使它们并没有被证明是有效的)

欢迎发表出版物,如果可以免费获得,那就更好了,否则,所介绍的技术总结和结果将非常好

也欢迎阅读有关真实编译器实现的技术文章


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

在阅读基于原型的对象系统的实现时,我遇到了以下多方法策略。它是在考虑这个领域的情况下编写的,但适应更传统的基于类的语言并不困难

第3节详细介绍了它,图5是一个有用的图表。其思想是,可以调度的每个对象(或者类)都有自己的方法表。(在这个意义上,它与C++是可比的)。将该对象(或类)分派的每个方法都放入表中。聪明的一点是,表格被分为多个子部分,对应于参数位置

澄清一下:假设您有一个方法,第一个参数专门处理类“Foo”,第二个参数专门处理类“qux”。类Foo的分派表的第1节将包含一个指向该方法的指针。而且,类Quux的分派表的第二节也将有一个指向该方法的指针。然后,要执行分派,请参考参数“类”分派表。如果方法指针匹配(如我们的示例中所示),这就是要调用的方法

这篇论文被称为“多次分派的原型”。

多分派的良好实现。事实上,它与虚拟表非常相似,很好地避免了这种支持通常需要的组合爆炸。谢谢:)这篇文章可能会有帮助,如果你仍然感兴趣@BharatMukkala:谢谢,看起来很有趣,我来看看:)