在对invokeDynamic做了很多阅读之后,我仍然有点困惑。一个重复的主题似乎是Clojure并不真正需要它,或者至少比JVM上的其他动态语言实现更少(Jruby,JPython) ,Groovy等。)。我不了解所有细节,但似乎有类型注释是主要原因,它只是消除了动态调度问题。
1-将invoke-dynamic描述为有效实现复杂方法调度方案的方法是否安全? (还有更多吗?)
2-不应该使用jit消除调用动态的需要吗?问题似乎是由于缺少运行时类型信息而jit 应该有这些信息。
3-JRuby似乎摊位有一个jit并使用invokdynamic,为什么?
答案 0 :(得分:3)
主要原因是Clojure并不“需要”invokedynamic,它实际上并没有那么多的动态调度。特别是:
这涵盖绝大多数派遣案件。
当然有一些调度情况,其中invokedynamic可能有用(例如,多方法),它可能可用于优化Clojure的其他部分(例如var lookup),因此Clojure将能够获得一些好处。