Duby和Juby有什么区别,为什么我需要其中任何一个?

时间:2009-08-26 20:04:31

标签: java ruby jruby

根据Charles Nutter Duby

  

Ruby的静态类型语言   语法和Java的类型系统。迪比   支持所有Ruby的文字,用法   本地类型推断(仅限参数   类型必须被声明),并运行为   像Java一样快(因为它产生   几乎相同的字节码)。但随着   虚拟动态的出现,杜比   需要一个玩伴。

1。什么是invokedynamic,为什么Duby“需要一个玩伴”?

另一方面,

Juby

  

基本上就像Duby一样   它使用Java的类型和Ruby   句法。但它利用了   新的invokedynamic操作码是100%   动态。 Juby是一个充满活力的Duby,或者   也许是Ruby的动态Java   句法。理解起来并不难。

实际上很难理解。

2。有人可以详细说明这种区别是什么吗?

第3。为什么我们需要( need!)另一种与Ruby相关的语言?或者更确切地说,还有两种与Ruby相关的语言?

5 个答案:

答案 0 :(得分:50)

答案 1 :(得分:6)

Mirah(以前称为Duby)存在,因为静态类型可以通过Java / Hotspot显着提高性能。 Surinx(以前称为Juby)是一回事,除了它还利用JDK7中的新性能特性来进一步提升性能。

性能功能通常称为“invokedynamic”,Nutter's blog也提供了很好的解释。

答案 2 :(得分:4)

刚刚遇到这个,直接from Charles himself部分解决了这个问题(重新:它们之间的区别):

  

这让我走向了未来   Surinx。它甚至比简单的更简单   杜比的未来:两者将合并。如   我曾在Surinx和Duby工作,   这对我来说很明显   他们基本上是同一种语言   具有不同的调度机制和   类型声明要求。和   因为Duby很容易对待无类型   或动态类型表达式   需要动态调用,有   没有理由Surinx不应该只是   被同化为Duby的一个特征。

答案 3 :(得分:3)

与语言一样,我们不会创建它们,因为我们需要它们。人们出于某种原因创造它们,除非我们需要它们,否则它们仍然模糊不清。

那里有很多晦涩难懂的语言;他们玩的很有趣,但可能不是你想做一个真正的项目。

答案 4 :(得分:2)

我怀疑在某些时候我可能能够在Plain Ol'Fynamic Ruby中对一段代码进行原型设计,当它工作但需要明显更快时,将其移植到相对较小的痛苦程度,然后关闭将编译为优化的JITted Java字节码的关系。或者很可能是IronRuby#.NET,Sapphire或其他。

图形处理,重数学,人工智能,类似的东西。我怀疑这样做会有一些乐趣...