在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/