Smalltalk动态查找优化

标签 smalltalk dynamic-dispatch

在Smalltalk中,在运行时查找方法可能涉及大量步骤,因为子类的方法字典不包含其父类(super class)中的方法,并且需要指针追踪来查找该方法。一个优化是每个子类将所有父类(super class)方法存储在其方法字典中。
问题:如何做到这一点?

一个明显的缺点是空间成本,但我只是想知道如何在 Smalltalk 中做到这一点?这与为最近调用的方法创建单独的缓存不同。

最佳答案

有很多方法可以缓存查找结果。只需阅读一些基本的 VMimplementation 论文 - 从绿皮书开始。您甚至可以免费在线找到 t - http://stephane.ducasse.free.fr/FreeBooks.html并在底部附近查找“历史片段,建议”。 普通解释器可以使用简单的哈希键控缓存。翻译虚拟机可以进入内联缓存、多态内联缓存、自适应缓存……根本不需要开发像 C++ vtables 这样痛苦的东西,这几乎就是你所建议的。 几十年来我们一直在关注这个问题。解决了。

关于Smalltalk动态查找优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37340726/

相关文章:

oop - 脆弱的基类是 "inheritance breaks encapsulation"的唯一原因吗?

java - 在 Java 中神奇地调用方法

smalltalk - 面向 Smalltalk 初学者的应用程序构建

smalltalk - pharo - 在服务器启动时运行代码

class - 测试一个类的实例

c++ - 协变返回类型和类型转换

smalltalk - 如何在 Squeak FFI 中定义联合类型

smalltalk - 子类流

C++ 在虚方法中使用捕获 lambda

c# - 访问分配给传入 Func<> 参数的方法