我已经读过关于Clojure与Scala的各种报道,虽然我意识到两者都有自己的位置。在比较Clojure和Scala时,有一些注意事项我还没有得到完整的解释:
1.)这两种语言中哪一种通常更快?我意识到这会因语言特性的不同而有所不同,但对性能的总体评估会有所帮助。例如:我知道Python字典真的很快。但总的来说,它是一种比Java慢得多的语言。我不想使用Clojure,并在以后遇到这个问题。
2.)与Java的互操作性如何?到目前为止,我所读到的是Scala的原生集合类型,这使得它与大型Java代码库集成有点笨拙,而Clojure遵循一种简单的Iterable/Iterator为中心的方式来与Java类互操作。对此还有更多想法/细节吗?
最终,如果clojure和scala之间的差距足够接近,我可能会同时尝试这两种方法。关于Clojure的一件事是它的语言看起来非常简单。但是话又说回来,Scala有一个非常灵活的类型系统。但是,我知道Scala速度很快(基于多个个人账户)。所以,如果Clojure的速度慢很多:我想知道的越早越好。
发布于 2009-10-01 22:27:39
我认为这两种语言对你来说都足够快了。在比较Python和Java时,将速度差异归咎于语言似乎有点不合理。Java是JIT编译的(除了在移动设备上*),而Python是解释的。仅仅因为两者都使用了字节码,并不意味着它们的实现将具有相当的性能。但是Scala和Clojure都是JVM语言,所以它们应该具有相似的性能。
与Clojure相比,Scala有一些实现上的优势,我希望它有更高的性能。尽管Scala的静态类型通常会转化为比Clojure的鸭子类型更快的速度优势,但Clojure确实支持类型提示,这可以大大提高代码的速度。普通的Scala可能比普通的Clojure更快,但您只需要优化瓶颈。程序的大部分运行时间都是由少量的实际代码生成的。
关于与Java的互操作,Scala更接近Java,但我确信这两种语言都能很好地互操作。Stuart Halloway在Clojure编程中写道:“您可以从Java代码访问任何您能访问的东西。”
自从Scala的作者Martin Odersky编写了Sun的Java编译器以来,我觉得Scala方面也没有出现什么问题。:-)
你很难选择两种更好的语言,尽管我也喜欢Ruby。你为什么要担心该试哪一个呢?为什么不把它们都试一下呢?Scala更有可能成为“下一个Java",而很难想象Lisp会在50多年没有这样做之后最终起飞。但很明显,Lisp有自己独特的抽象层次,而Clojure相当简单,所以Scala + Clojure不会比(相当复杂的) Scala难太多,我相信您会很高兴这样做的。
就这一点而言,它们是互操作的。
* dalvik (android的JVM)在2010年获得了2.2版本的JIT编译器
发布于 2009-10-01 23:00:11
在目前的JVM中,Scala在静态类型方面有一个优势,因为JVM对动态类型的支持--反射--很慢。事实上,一个必须通过同样的技术实现的Scala特性,结构类型,经常因为这个原因而受到警告。
此外,Scala可以很好地接受可变对象,而且一些算法在实现可变对象时速度更快。
因为Scala和Java本质上都是基于类的语言,所以它们更容易互操作。或者,也许是更无缝的。Java类是Scala的类,Scala类是Java的类。当涉及到Scala的单例或Java的静态成员时,可能会出现问题,特别是当有一个框架需要以某种方式工作时。
所以我在这两个方面都选择了Scala。从很多方面来说,Clojure是一种更好的语言,而且(到目前为止)它确实有Scala上没有的非常有趣的特性,但是您可以通过实现完整的功能来获得这样的好处。如果您打算这样做,那么Clojure可能会更好。如果不这样做,那么您可能应该继续使用Scala。
发布于 2009-10-01 22:42:14
"Computer Language Benchmark Game“生成的统计数据是您可能会找到的最好的统计数据。
它们很深入,你可以比较很多种语言。问题是它们没有涵盖Clojure :(
也就是说,提交任何东西都很容易--它都是开源的。
统计数据显示,Scala的速度非常快。
https://stackoverflow.com/questions/1506728
复制相似问题