gpt4 book ai didi

javascript - 多态内联缓存如何与可变类型一起工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:49 25 4
gpt4 key购买 nike

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

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

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

我相信一定有一个很好的解决方案,因为这个问题直接适用于 JavaScript,据我所知,所有三个大型 JavaScript 虚拟机都有 PIC。

最佳答案

在 V8 中,我假设 monkeypatching 会更改对象的“隐藏类”(“映射”是 SELF 术语)。这在你猴子修补对象本身时会起作用。

如果你猴子修补类(你能做到吗?是 JS 吗?),我猜它会使所有 PIC 无效,因为这可能很少见。或者,它可能会重新编译旧方法以直接分派(dispatch)到新方法(我猜是在进行类型检查之后)

顺便说一句,我不认为其他“三巨头”实际上使用 PIC。我猜你指的是 squirrelfish 和 tracemonkey。前者是解释器,后者侧重于跟踪方法,我不记得听说过任何有关 PIC 的信息。事实上,我不认为 tracemonkey 对对象做了任何很酷的事情,但我可能是错的。

关于javascript - 多态内联缓存如何与可变类型一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com