编程语言
首页 > 编程语言> > javascript – 多态内联缓存如何与可变类型一起使用?

javascript – 多态内联缓存如何与可变类型一起使用?

作者:互联网

多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找).

如果类型对象是可变的,那么如何处理类型比较(即该方法可能在运行时被猴子修补成不同的东西)?

我提出的一个想法是一个“类计数器”,每次调整一个方法时它会增加,但是这似乎在一个重度猴子修补的环境中会非常昂贵,因为它会杀死所有的PIC那个类,即使它们的方法没有改变.

我确信必须有一个很好的解决方案,因为这个问题直接适用于JavaScript,而AFAIK所有三个大型JavaScript虚拟机都有PIC.

解决方法:

在V8中,我假设monkeypatching会改变对象的“隐藏类”(“map”是SELF术语).这可以在你猴子修补对象本身.

如果你猴子修补了这个类(你可以做那个是JS吗?),我猜它会使所有的PIC无效,因为这可能很少见.或者,它可能会重新编译旧方法直接调度到新方法(在我猜测类型检查后)

另外,我认为其他“大3”实际上并不使用PIC.我认为你的意思是squirrelfish和tracemonkey.前者是翻译,后者则侧重于跟踪方法,我不记得听过有关PIC的任何内容.事实上,我不认为tracemonkey对物体做任何酷事,但我可能是错的.

标签:javascript,vm-implementation,dynamic-typing,cache-invalidation,polymorphic-funct
来源: https://codeday.me/bug/20190710/1423843.html