Vtables在大多数OO实现中无处不在,但它们有替代方案吗? vtables的wiki页面有一个简短的介绍,但不是真的有很多信息(和存根链接)。vtable的替代方案
你知道一些不使用vtables的语言实现吗?
是否有免费的在线网页讨论替代方案?
Vtables在大多数OO实现中无处不在,但它们有替代方案吗? vtables的wiki页面有一个简短的介绍,但不是真的有很多信息(和存根链接)。vtable的替代方案
你知道一些不使用vtables的语言实现吗?
是否有免费的在线网页讨论替代方案?
是的,有很多选择!
V表是唯一可能的时候可以静态确定
通常,继承是通过将一个基于字符串的表映射到其实现的函数名称以及允许每个类查找其基类的指针来实现的。然后通过遍历这个结构来实现方法调度,寻找实现该方法的接收者对象的类的最低类。为了加速ip执行,通常会使用内联缓存等技术,其中呼叫站点根据对象的类型存储应该调用哪个方法的猜测,以避免花费时间遍历整个结构。 Self编程语言使用了这个想法,然后它被合并到HotSpot JVM中以处理接口(标准继承仍然使用vtables)。
另一种选择是使用跟踪,其中编译器发出代码来猜测对象的类型,然后硬编码将方法调用到跟踪中。 Mozilla Firefox在其JavaScript解释器中使用它,因为没有办法为每个对象构建vtables。
我刚刚完成了一门编译器课程的教学,我的一个讲座是关于各种编程语言中对象的实现以及相关的权衡。如果您愿意,可以查看幻灯片here。
希望这会有所帮助!