gpt4 book ai didi

clojure - jit 不应该减少对 invokeDynamic 的需求吗?

转载 作者:行者123 更新时间:2023-12-01 15:02:46 25 4
gpt4 key购买 nike

在对 invokeDynamic 进行了大量阅读之后,我仍然有点困惑。一个重复的主题似乎是 Clojure 并不真正需要它,或者至少比 JVM 上的其他动态语言实现(Jruby、JPython)更少需要它,Groovy 等)。我不明白所有的细节,但似乎有类型注释是主要原因,它简单地消除了动态调度问题。

1- 将 invoke-dynamic 描述为有效实现复杂方法调度场景的方式安全吗? (还有更多吗?)

2- jit 不应该消除对 invoke-dynamic 的需要吗?问题似乎是由于缺少运行时类型信息而引起的,而 jit 应该 具有此信息。

3-JRuby 似乎有一个 jit 并使用 invokdynamic,为什么?

最佳答案

主要原因是 Clojure 并不“需要”invokedynamic,因为它实际上并没有做那么多的动态调度。特别是:

  • 只要 Clojure 有足够的类型信息(例如调用带有类型提示的 Java 类),它就会直接进行方法分派(dispatch)
  • 使用接口(interface)方法调度(通过 IFn)调用所有函数
  • 编译器在许多情况下(例如原始函数)进行智能内联,避免任何类型的分派(dispatch)
  • 通过接口(interface)方法dispatch调用协议(protocol)函数

这涵盖了绝大多数 dispatch 案例。

当然,在一些调度情况下,invokedynamic 可能会被证明是有用的(例如多重方法),并且它可能用于优化 Clojure 的某些其他部分(例如 var 查找),因此 Clojure 将能够获得一些好处。

关于clojure - jit 不应该减少对 invokeDynamic 的需求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743761/

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