JVM上性能最高(最快)的lisp实现是什么? 通过lisp实现,我考虑了lisp系列中任何语言的所有实现,如Common Lisp,Scheme,Clojure,......
我知道使用类型提示可以很快地制作Clojure,ABCL通常不被认为是快速的。我没有在JVM上使用任何Scheme的经验,但是听说Kawa也很快。
答案 0 :(得分:11)
使用Clojure,你可以达到Java的速度(当然有类型提示),你不可能比java更快(在一些非常罕见的情况下执行)。我不知道其他的lisps可能速度相同但速度不快。
所以说关于标准呼叫速度等等。
Clojure的数据结构并不总是尽可能快,但真正弥补了其他属性,如线程安全,不可变和快速读取。
为了使数据结构更快,Rich发明了瞬态,使它们变得可变,它们仍然可以正常运行(并且速度更快),并且他已经在开展下一个重大事件了解(关于Emerging Languages阵营谈话的内容)富人)。
使用clojure编写并发代码要容易得多,以便真正导入以生成快速程序。
接下来是数学。 JVM上有三个级别的速度。具有盒装类型的数学,具有溢出检查的原始类型,或没有溢出检查的类型。 Clojure提供了所有这些,所以没有限制。
接下来就是你可以用多快的速度使用Java,如果你必须使用你不会表现得很好的包装器,并且在大多数JVM语言中经常使用java调用。要在clojure中实现clojure,clojure需要添加一个低级构造,以便您可以在没有任何开销的情况下与java进行交互。
因此,clojure的速度与JVM上的速度一样快。
P.S。
协议就像真正快速的多方法一样,不是那种通用的,但是发送速度足以在clojure核心中使用它们(因此不再依赖于java)。看起来很酷。
答案 1 :(得分:9)
虽然this并不是很多好的数据,而其他一些似乎表明这一点很明显。在执行非不可变任务时,不可移植语言会受到轻微影响,而在执行高度并行任务时,非不可变语言会受到影响。
在考虑这些问题时,考虑“故障恢复选项”会有所帮助。对于你的代码的任何部分,Clojure可以回退到java,分析器告诉你的不是它的威力。
简而言之:我投票反对:)
答案 2 :(得分:3)
答案 3 :(得分:1)
过去几周我一直在测试各种lisps。 Kawa是我迄今为止在启动时间,REPL响应时间和运行基本脚本方面尝试过的最快的JVM实现。作者在2010年公布了一些表现统计数据,这表明Kawa的表现明显优于clojure。 YMMV。