对性能和Java互操作性:Clojure的与斯卡拉(On Performance and Java

2019-08-17 03:36发布

我已经看过的Clojure与斯卡拉的各个账户,虽然我认识到,都有自己的位置。 有迹象表明,我没有获得,当涉及到比较两个Clojure的使用Scala在一个完整的解释几个方面的考虑:

1)这两种语言的普遍较快是什么? 我意识到,这将改变从一种语言功能,另一个却表现的总体评价将是有益的。 例如:我知道,Python字典是真快。 但作为一个整体,它是一个比Java 慢的语言。 我不想去使用Clojure和碰到这个问题的道路。

2)如何与Java的互操作性? 所有到目前为止,我已经阅读是Scala本地集合类型,使其成为一个有点笨拙与大量基于Java的代码整合,而Clojure的遵循简单的可迭代/迭代器为中心的方式与Java类,操作间。 更多关于这个想法/细节?

最后,如果它是一个紧密的Clojure和Scala之间有足够的画,我可能会尝试他们俩。 关于Clojure的一件事是语言看起来简单。 但话又说回来,Scala有一个非常灵活的类型系统。 但是,我知道,Scala是快(基于多个个人账户)。 所以,如果Clojure是显著慢:我想知道宜早不宜迟。

Answer 1:

我认为,任何一种语言将是速度不够快给你的。 当比较Python和Java,似乎有点不合理的怪语言的速度差。 Java的编译JIT(除了在移动设备上*),而Python是解释。 正因为两者都使用一个字节码并不意味着实施将有甚至远程相当的性能。 但是,Scala和Clojure的是JVM的语言,因此,他们应该也有类似表现。

Scala有超过Clojure的几个实现优势和我所期望的有些更高的性能。 虽然Scala的静态类型通常会转化为速度优势Clojure的鸭子类型,Clojure的支持类型提示,可以大大加快代码。 可能的话,普通Scala是比普通的Clojure快,但你只需要优化瓶颈。 大多数程序的运行时间由实际代码少量生成。

关于互操作W / Java中,Scala是更接近于Java,但我敢肯定,这两种语言很好地互操作。 在编程Clojure的斯图尔特哈洛韦写道:“[您可以访问] 任何你能够从Java代码实现。”

而且,由于斯卡拉作者马丁·奥德斯基写道 Sun的Java编译器,我还挺想没有球被丢弃在斯卡拉的一面,无论是。 :-)

你会捉襟见肘选择两个更好的语言,虽然我喜欢红宝石也。 你为什么担心尝试哪一个? 为什么不试试他们两个? Scala是更可能是“未来的Java”,而这是很难想象的Lisp将最终没有这样做,超过50年后起飞。 但很显然,Lisp是在抽象的自己独特的水平,Clojure是相当简单的,所以斯卡拉+ Clojure的不会是不仅仅是困难得多(相当复杂的),Scala和我敢肯定,你会很高兴你没有它。

对于这个问题,他们互操作...

*的Dalvik(Android的JVM)在2010年得到了JIT编译器2.2版



Answer 2:

本JVM Scala有该帐户被静态类型,如JVM支持动态类型的优点 - 反射 - 是缓慢的。 事实上,这必须通过相同的技术来实现一个功能斯卡拉,结构类型,往往是警告不要因为这个原因。

此外,斯卡拉接受可变对象就好了,有的算法只是加快了与可变性实现。

由于两个斯卡拉和Java基本上是基于类的语言,他们互操作更容易。 或者,也许,更加无缝。 一个Java类是一类对Scala和斯卡拉类是一类为Java。 当涉及到Scala的单身或Java的静态成员,特别是当有涉及期待的事情以某种方式来工作的框架可能会出现问题。

所以我使用Scala去这两个帐户。 Clojure是,在许多方面,有较好的语言 ,它当然有斯卡拉非常有趣的功能不存在(到目前为止),但你收获的去功能齐全等优点。 如果你打算这样做,那么Clojure是极有可能更好。 如果不这样做,那么你或许应该留在斯卡拉。



Answer 3:

需要注意的是Clojure的和Scala是两种完全不同类型的编程语言- Clojure是一个功能类似于Lisp语言,它不是面向对象的。 Scala是具有功能的编程特征的面向对象的语言。

在我看来,语言的功能和概念(功能,面向对象,...)是选择的语言不是性能(特定实现该语言的)更重要的标准 - altough据我所知,你不想获得陷入不存在用于没有表现良好的实现中可用的语言。

我会去斯卡拉,因为它是面向对象,但也可以让你学习函数式编程(如果你有兴趣在这一点)。 在另一方面,如果你不关心OO和你想了解“纯”函数式编程,尝试的Clojure。



Answer 4:

由“生产的统计计算机语言基准游戏 ”是关于你可能会找到最好的。

他们深入,你可以比较多的语言。 问题是,他们没有覆盖的Clojure :(

这就是说,它是很容易提交任何东西 - 这是所有开源。

该统计数据会说,Scala是非常该死的快。



Answer 5:

  1. 惯用的 Scala是不是地道 Clojure的更快,并且将继续这样做。
  2. Scala和Clojure中轻松地坐在Java之上。 无论是坐在以及它的下面。

如果你的代码是时间紧急和空间的关键贯穿始终,坚持到Java。 但它不是,即使你认为它是。

计算机语言基准游戏揭示了Clojure的真实资源成本小光。 采用无Clojure的数据结构。 功能和序列抽象不会出现。

Clojure中可能会出现简单。 它不是,但它的表现。 它可以运行比Java慢五倍,但是小5次(因人而异)。 对于大多数的大多数应用程序,这是一个巨大的胜利。 但对于一些,和许多其他的一些地方,这是一个毁灭性的损失。

随着的Clojure语言的经验,我相信这是可能提前告诉你的问题是否干净裂解成可以简洁地和充分地(在性能方面)的一部分用Clojure和需要做在Java中的部分表示。

  • 你可以去斯卡拉精简版:在Scala中编写Java成语。 你会获得一些简洁,语法这是对眼睛容易,连贯虽然复杂类型的系统。
  • 有没有这样的事情作为Clojure的精简版:用Clojure编写Java成语是毫无意义的。 所有你会得到缓慢的Java这是很难理解,因为它跨越用来表达它的成语的粮食。

斯卡拉一直说要来的Java做的权利 。 Clojure是不一样的Java。 你可能会说,这是Lisp的做正确的 -一个大胆的,有些人会说荒谬,要求-这可能会变成真的。



Answer 6:

在互操作性,我不能Clojure的发言,但我希望它是在一个类似的情况作为斯卡拉。

这是十分容易从斯卡拉调用Java。

这是很容易从Java,只要你符合你的外部API来Scala和Java之间的共同点调用斯卡拉。 例如,Scala的对象是在像Java中的静态方法的一些使用方式,但它是不一样的东西。 Scala类可以编译成若干个教学班,在Java中看起来很有趣的名字。

你不会想混搭得多。 在斯卡拉或Clojure中使用的Java库的很多建筑部件是非常可行的。 当然,你可以调用从Java这个组​​件,但你不会想要做的就是尝试使用Scala的API旨在通过使用从Java Scala程序。

SVN声称自己是“CVS做得对”。 在我看来,Scala是Java语言写的权利。



Answer 7:

该PragPub的2010年11月问题讨论的Clojure,Java的互操作性。 调用Java方法很简单,但扩展Java类/接口是完全不同的。

斯卡拉,另一方面是更接近Java的。 斯卡拉Java的互操作性是在阐述http://www.codecommit.com/blog/java/interop-between-java-and-scala

调用Java代码和扩展的Java类/接口的工作方式与调用Scala代码相同。 有些痛点可能是处理Java的泛型的一些边缘情况,因为Scala的类型系统是更强大的比Java的。 创建getter和setter方法的Java Bean的约定下列要求的注释 。

从Java调用Scala是大部分时间直接,但是例如Scala的同伴对象需要知道他们是如何编译成字节码。 还采用特质与从Java非抽象方法应该是复杂的,并要求有特殊字符的方法就需要知道他们是如何在字节码编码。



Answer 8:

这是现在(2010年5月),值得Clojure的最新1.2分支寻找热塑成型 - 这包括很多的基本类型和静态类型额外支持(通过多种类型的提示和协议)。

我的理解是,当你需要它来获得速度相当于正好写在纯Java相同的代码,你可以使用这些功能。



文章来源: On Performance and Java Interoperability: Clojure vs. Scala