关于性能和Java互操作性:Clojure与Scala

2022-08-31 12:21:30

我已经阅读了关于Clojure与Scala的各种描述,虽然我意识到两者都有自己的位置。在比较Clojure和Scala时,我还没有获得一个完整的解释:

1.)这两种语言中哪一种通常更快?我意识到这将因语言功能而异,但对性能的一般评估会有所帮助。例如:我知道Python字典真的很快。但总的来说,它是一种比Java慢得多的语言。我不想和Clojure一起去,在路上遇到这个问题。

2.) 与 Java 的互操作性如何?到目前为止,我所读到的只是Scala具有本机集合类型,这使得与大型Java代码库集成有点笨拙,而Clojure遵循一种简单的迭代/迭代器中心方式与Java类进行交互。对此有更多想法/细节吗?

最终,如果它是clojure和scala之间足够接近的平局,我可能会尝试它们。关于Clojure的一件事是语言似乎非常简单。但话又说回来,Scala有一个非常灵活的类型系统。但是,我知道Scala速度很快(基于多个个人帐户)。所以,如果Clojure明显变慢了:我想知道早点而不是晚点。


答案 1

我认为任何一种语言对你来说都足够快。在比较Python和Java时,将速度差异归咎于语言似乎有点不合理。Java是JIT编译的(移动设备除外*),而Python是解释的。仅仅因为两者都使用字节码并不意味着实现将具有甚至远程可比的性能。但是Scala和Clojure都是JVM语言,所以它们应该具有相似的性能。

与Clojure相比,Scala有一些实现优势,我期望性能会更高一些。虽然Scala的静态类型通常比Clojure的鸭子类型化具有速度优势,但Clojure确实支持类型提示,这可以大大加快代码速度。可能,普通的Scala比普通的Clojure更快,但你只需要优化瓶颈。程序的大部分运行时是由少量的实际代码生成的。

关于interop w/ Java,Scala更接近Java,但我相信这两种语言都可以很好地互操作。在《Programming Clojure》一书中,Stuart Halloway写道:“[你可以访问]任何你可以从Java代码到达的东西

自从Scala的作者Martin Odersky编写了Sun的Java编译器以来,我有点认为Scala方面也没有丢球。:-)

你很难选择两种更好的语言,尽管我也喜欢Ruby。你为什么担心要尝试哪一个?为什么不同时尝试一下呢?Scala更有可能成为“下一个Java”,而很难想象Lisp在50多年没有这样做之后最终会起飞。但很明显,Lisp有自己独特的抽象水平,而Clojure相当简单,所以Scala + Clojure不会比(相当复杂的)Scala更难,我相信你会很高兴你做到了。

就此而言,它们可以互操作...

dalvik(android的JVM)在2010年获得了2.2版本的JIT编译器。


答案 2

在目前的JVM中,Scala在静态类型化方面具有优势,因为JVM对动态类型的支持 - 反射 - 速度很慢。事实上,由于这个原因,必须通过相同的技术(结构类型)实现的一个Scala功能经常被警告。

此外,Scala接受可变对象很好,有些算法的可变性实现速度更快。

由于Scala和Java本质上都是基于类的语言,因此它们更容易进行互操作。或者,也许,更无缝。Java类是Scala的类,Scala类是Java的类。当涉及到Scala的单例或Java的静态成员时,可能会出现问题,特别是当有一个框架期望事情以某种方式工作时。

所以我会在这两个帐户上使用Scala。在许多方面,Clojure是一种更好的语言,它当然具有非常有趣的功能,但到目前为止,Scala上没有,但是通过完全功能化,您可以获得这些好处。如果你打算这样做,那么Clojure很可能更好。如果你不这样做,那么你应该留在Scala。


推荐