12

Mirah 语言比 JRuby、Groovy 和 Scala 提供什么?

4

5 回答 5

12

与自带库的全功能语言不同,Mirrah 更像是 Java 库的不同“前端”。

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

这是主要的好处:Java 的不同语法。

于 2010-11-23T09:21:43.963 回答
9

根据对Mirah 的创建者的采访, Mirah(在爪哇语中意为“红宝石”)的意义在于创建 Ruby 的高性能变体。足够类似于 Ruby 的语法使其易于使用,但仍然足够接近 Java 和 JVM 语义,因此它可以在没有 JVM 之上的大型运行时层的开销的情况下运行。

选择报价:

Mirah 相对于类似语言的大部分优势归结为如此轻量级。在 Groovy、Scala、JRuby、Clojure 或 Jython 中,当您编写“Hello, world”时,您就已经将自己束缚在运行时库中。在 Mirah 中,"Hello, world" 与 JRuby 中一样简洁,但还有一个额外的好处是不会强加任何对您的依赖;源文件进去,类文件出来,就是这样。我相信 JVM 需要一种新的无依赖语言,而 Mirah 是我尝试提供的一种。

虽然 JRuby 的性能可以与其他 Ruby 解释器相媲美或超过,但最快的 JRuby 代码仍然落后于纯 Java 性能一个数量级。虽然您可以期待 JRuby 的性能在 1.6 版本中有所提高,但 Mirah 是一种突破性能上限的尝试,并为寻求与 Java 代码同等执行速度的程序员提供了一个选择。

于 2010-11-23T02:15:45.947 回答
8

与 Groovy 对比

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

与 JRuby

  • 静态类型

与 Scala 对比

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

主要优点是静态类型(在 JVM 上更快的性能和更容易与现有 Java 库的互操作)和熟悉的语法(如果您来自 Ruby)。

如果需要考虑依赖项(例如,开发一个 android 应用程序),那么您不应该让这个指导您的语言选择。使用像 Proguard 这样的工具将公平竞争。

如果您来自 Ruby,那么 Mirah 是一个不错的选择。如果你来自 Erlang 或 Haskell,那么你会想要 Scala。如果你是 LISPer,那么你会想看看 Clojure。

如果您之前唯一的经验是 Java,那么您真丢脸!- 你可能应该选择 Scala - 作为 Java 的继承者,它正在迅速获得声誉,工具支持目前更强大,你将在一个大型社区中进行同样的转换,所以有很多博客/教程已经可用。

和 Groovy?如今,Groovy 几乎从来都不是正确的选择……

于 2010-11-27T15:18:07.823 回答
5

我每天都在 Google AppEngine 上使用 Mirah。

以下是我使用 Mirah 的原因:

  • 没有运行时库
  • 非常好的语法
  • 和 Java 一样快

在引擎盖下安装 Java 也非常有帮助:

  • 实体类型系统
  • 有据可查
  • 常见问题的已知解决方案

我做了一些 Groovy,很多 JRuby,但没有做 Scala。如果你知道这些,试试 Mirah。如果没有,我会选择 JRuby。

于 2010-12-14T11:35:14.050 回答
-2

Mirah 只是 java 的另一种 ruby​​ish 语法。恕我直言,一点都不好。它对泛型一无所知,而且工具也很差。最好尝试 ceylon、xtend、scala、kotlin 等。 Mirah
编译为 java 类(不再是源代码)。Xtend 编译为 java 源代码,因此更容易找出它在幕后的作用。Ceylon 和 scala 有自己的标准库(尽管 java 互操作在它们两者中都接近完美),但不确定 kotlin。Kotlin 是 JetBrains 的孩子,因此与 IDEA 联系在一起。
JRuby我也不喜欢。它在 java 互操作中有太多错误。而且它也有太多重新发明的轮子。我的意思是编码(它不使用 java 字符串和正则表达式,而是在原始字节缓冲区之上的自定义字符串)、IO、异常处理、线程等。
jruby 唯一的优点是它是 ruby​​。许多 ruby​​ 代码将按原样工作。
Groovy OTOH 并没有重新发明轮子,它使用经过良好测试的 java 库,并且只是添加了语法糖。groovy-java 互操作也很棒。它可以泛型。线程、异常、字符串、集合——就像它们在 java 中一样,只是 java 类。

于 2015-08-04T11:00:37.090 回答