Mirah相对于JRuby、Groovy和Scala有哪些优势?

12

Mirah语言 相对于JRuby、Groovy和Scala有什么优势?


1
@pst:你认为编程语言是动态的还是静态的,这个问题如此重要,以至于没有其他可比性吗? - JUST MY correct OPINION
2
@pst:没时间学四门语言 :) 更不用说我怀疑我能否通过快速嗅闻来感受到每种语言的真正气息。 - Chiron
@El Gusto 我说“尝试”,而不是“学习”(彻底):-) 根据我的经验,只需要在一个小的“介绍”项目上花费几天时间,就可以知道我是否想要追求这种语言(例如,我会给它分数)或者不想要。这并不意味着了解细微差别或者代码是否符合惯用法,而是足以大致看到“全貌”。 - user166390
@JUST MY correct OPINION(很棒的名字,顺便说一下)- 这些问题经常出现。这是不可比较的。无论是红色美味(呸!)还是血橙都没关系。 - user166390
@3lijandro:关于给出的答案,有什么遗漏的吗?我建议要么提到您认为目前还缺少什么,要么接受一个答案,那会很好。 - soc
5个回答

12

与自带库的完整功能语言不同,Mirrah更像是Java库的另一种“前端”。

Mirrah代码不依赖于自己的环境(除了编译时需要Mirrah编译器)。

这是它的主要优点:提供了一种不同的Java语法。


9
根据与Mirah创建者的访谈,Mirah(在爪哇语中意为“ruby”)的目标是创建一个高性能的Ruby变体。Mirah具有足够类似Ruby的语法以使其易于使用,但仍然接近Java和JVM语义,这使得它可以在JVM上运行而无需大量的运行时开销。
以下是其中一段引用:
“相对于其他类似语言,Mirah的很多好处都来自于其轻量级。在Groovy、Scala、JRuby、Clojure或Jython中,一旦你写下“Hello, world”,就已经给自己增加了运行时库的负担。在Mirah中,“Hello, world”与JRuby一样简洁,但有一个额外的好处,即不会强制施加任何依赖项;源文件输入,类文件输出,仅此而已。我相信JVM需要一种新的无依赖语言,Mirah是我提供这种语言的尝试。”
虽然JRuby的性能与其他Ruby解释器相当或超过其他解释器,但最快的JRuby代码仍比纯Java代码慢一个数量级。尽管您可以预期随着1.6版本的发布,JRuby的性能将得到提高,但Mirah试图突破性能瓶颈并为寻求与Java代码执行速度相当的程序员提供一个选择。

3
执行摘要:“Mirah语言在JRuby、Groovy和Scala之上有什么优势?”根据他们的说法,是性能。 - Thilo
7
Scala是静态类型语言。Ruby/Groovy/Clojure的性能负担Scala并不具备。为什么它会被列入这个列表中呢? - pedrofurla
3
当你在Scala中写一个“Hello World”程序时,你会得到一个大小为6,496,110个字节的scala-library.jar文件(Scala 2.8.1版本),再加上Java自己的库(虽然这确实让那个文件相形见绌)。Mirah没有带来任何新的库,这确实很有趣。 - Daniel C. Sobral
3
实际上,我在他们的网站上没有看到关于“性能”的任何内容。他们所说的是:“没有当前的JVM语言可以在不引入运行时库(通常是具有禁止性大小的)的情况下达到Mirah的美学目标。”除非Thilo使用了奇怪的性能定义。 - Daniel C. Sobral
2
就性能而言,自Scala 2.8以来提供的专业支持,Scala能够在许多情况下生成比Java更高效的代码-通过消除一些基本类型的装箱和拆箱。这样做的代价是增加编译后字节码的大小。 - Kevin Wright
显示剩余6条评论

8

与Groovy相比

  • 语法更加熟悉于现有的Ruby/JRuby程序员
  • 静态类型

与JRuby相比

  • 静态类型

与Scala相比

  • 语法更加熟悉于现有的Ruby/JRuby程序员

主要优势在于静态类型(在JVM上性能更快,与现有的Java库交互更容易),而且语法熟悉(如果你来自Ruby)。

当考虑到依赖关系时(例如开发Android应用程序),则不应让此指导您的语言选择。使用像Proguard这样的工具将平衡竞争力。

如果您来自Ruby,则Mirah是一个不错的选择。如果您来自Erlang或Haskell,则需要Scala。如果您是LISPer,则应查看Clojure。

如果您唯一的先前经验是Java,则应该为之感到羞愧! - 您应该选择Scala - 它正在迅速获得取代Java的声誉,工具支持目前更加强大,并且您将进入一个由其他进行同样转换的人组成的大社区,因此已经有很多博客/教程可用。

那么Groovy呢?现在几乎从来不是正确的选择...


3
@seymour - James Strachan(Groovy的创造者)在他的博客中很好地总结了这一点:http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html。 - Kevin Wright

5
我每天都在Google AppEngine上使用Mirah。
以下是我使用Mirah的原因:
- 没有运行时库 - 语法非常好 - 和Java一样快
在底层使用Java也非常有帮助:
- 坚实的类型系统 - 良好的文档 - 常见问题的已知解决方案
我做过一些Groovy,很多JRuby,但没有Scala。如果你知道这些,可以尝试Mirah。如果不知道,我会选择JRuby。

感谢分享生产故事。 - Chiron
不确定我理解那个逻辑:如果你没有使用过Groovy或JRuby,就选择JRuby。如果你已经使用过它们,那么选择Mirah。我对此提出质疑!如果有什么的话,强烈建议选择Scala,除非你需要Ruby语法或者不使用proguard来删除依赖项。 - Kevin Wright
我可以向任何人推荐Ruby / JRuby,因为它易于上手且有趣。 - hakunin
@hakunin,为什么不选择Scala呢?我认为缺少标准库是一个劣势。因为你有漂亮的语法,但仍然必须使用丑陋的Java库API。例如,将Collections.sort(l) { |a, b| a.c.compareTo(b.c) }与l.sort_by(&:c)进行比较。 - Alexey
有没有关于如何使用Mirah和GAE的教程?^^ - Kokizzu
1
你可以从这里开始:http://code.google.com/p/mirah-on-gae/(免责声明:我已经转向使用Python来开发GAE,不知道Mirah的现状如何) - hakunin

-2

Mirah是Java的另一种类似于Ruby的语法。我个人认为不太好用。它对泛型一无所知,而且工具支持也很差。更好的选择是尝试Ceylon、Xtend、Scala、Kotlin等。
Mirah可以编译成Java类(不再是源代码)。Xtend编译成Java源代码,因此更容易了解其底层实现。Ceylon和Scala有自己的标准库(尽管在这两种语言中与Java的互操作性接近完美),但我不确定Kotlin。Kotlin是JetBrains的产品,因此与IDEA紧密相连。
我也不喜欢JRuby。它在Java互操作性方面存在太多错误。它还有太多重新发明轮子的问题。我的意思是编码(它不使用Java字符串和正则表达式,而是在裸字节缓冲区上使用自定义字符串),IO,异常处理,线程等等。
JRuby唯一的优点是它是Ruby。许多Ruby代码只需原封不动地运行即可。
另一方面,Groovy没有重新发明轮子,它使用经过充分测试的Java库,并仅为其添加语法糖。此外,Groovy-Java互操作性非常好。它可以使用泛型。线程,异常,字符串,集合-都是作为Java类在Java中存在的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接