为什么为Java VM编写了这么多新语言?

时间:2010-03-19 14:19:46

标签: java scala clojure jvm sun

越来越多的编程语言(Scala,Clojure,......)出现在Java VM中,因此与Java Byte-Code兼容。

我开始问自己:为什么选择Java VM?

  • 是什么让它变得如此强大或受欢迎,以至于为它创造了新的编程语言,它们似乎也越来越受欢迎?

  • 为什么不为新语言编写新的VM?

10 个答案:

答案 0 :(得分:54)

  

为什么不为新语言编写新的VM?

那个很容易:

  • 写一个好的VM很难
  • 写一个快速的VM很难
  • 使虚拟机在多种架构下运行很难
  • 现有库可与现有VM配合使用
  • 现有工具(调试器,分析器,编译器......)与现有VM配合使用
  • 让人们安装新VM很难
  • 与针对同一VM的其他语言的即时互操作性
  • 现有虚拟机已在生产中进行了全面测试

答案 1 :(得分:26)

绩效和图书馆

  • JVM是世界上经过大量优化的软件之一。
  • 利用庞大的Java类库。
  • JVM中Java和非Java语言之间的交互有效。

答案 2 :(得分:19)

JVM坚如磐石,可以从最小的Java SmartCard(可以,一个小小的VM)到你能想象到的最大的集群超级计算机。

因为它坚如磐石,所以人们都有这样的国家:

  • 将Java SmartCard作为其国民身份证或其医疗保健系统卡(或两者)存放在其钱包中
  • 手机有一个JVM(或Dalvik VM,基本上是谷歌重新命名的Java VM版本)。哎呀,iPhone有一个优化的ARM CPU 来运行Java字节码(但出于商业原因,Apple决定不在iPhone / iPad上提供Java)。
  • 当然拥有Java的BluRay播放器(因为它是BluRay规范的一部分)。

我正在使用Java开发商业软件:我们在Windows和OS X上销售,但我们都在Linux上开发。它只是有效。它也适用于Solaris,等等。那是因为我们的目标是JVM:再见可移植性问题。只要平台有VM,软件就可以运行。

然后我无法相信任何人提到它:从安全的角度来看,这是一个非常好的开始。

Java VM在设计上不受缓冲区溢出/溢出的影响。这是巨大的。这实际上比大多数人意识到的要好得多。

我在Linux上记得的唯一“Java”缓冲区溢出(由于安全问题促使我升级)实际上是一个缓冲区溢出导致任意代码执行...一个C写的lib(zlib,如果我没记错的话)回到Linux上的Java仍然是默认为lib的日子。

当然,对于webapps缓冲区溢出/溢出导致任意代码执行不再是最重要的攻击向量(现在XSS和SQL注入已经窃取了该节目)。但在所有其他情况下,缓冲区溢出/溢出是大多数安全问题的 源。

JVM对此免疫。

除此之外,由于它的设计,它很容易插入各种工具,如分析器和调试器。

这是一种非常可靠和安全(正确使用时)的技术。这就是为什么它被技术娴熟(Java在谷歌的巨大,从GMail到他们的Android到GWT等)以及技术不那么精明的公司如此广泛使用。

Java的成功实际上可以说是来自JVM,“Java VM”比“Java语言”更重要。

JVM是过去20年来最大的“语言”成功故事。这是应得的。它就在这里:)

答案 3 :(得分:15)

  • 已经看到了15年的改进,性能改进等。
  • free and open source
  • 在各种各样的平台上运行
  • 在单个VM上支持多种语言
  • 主要语言(Java)是最广泛使用的语言之一,因此Java + JVM是一个相对安全的切入点
  • 相当安全和健全

答案 4 :(得分:5)

因为其他人已经麻烦地确保它在每个主要平台上运行良好。

如果您编写自己的VM,则必须编写一个用于Linux / Unix / BSD,一个用于Mac,一个用于Windows,并且必须在所有这些平台上支持VM以及支持语言编译器和运行时库。如果您使用Java VM,Oracle,IBM和Apple将为您完成第一部分。

答案 5 :(得分:5)

  

是什么让它如此强大或受欢迎,以至于为它创造了新的编程语言,它们似乎也越来越受欢迎?

它是免费的&开放,成熟(稳定,完整),周围的生态系统是巨大的。

  

为什么不为新语言编写新的VM?

编写与JVM一样好的VM很难。 JVM的规范及其实现已经被业界最优秀的人们提炼了十多年。

答案 6 :(得分:5)

因为Java VM近20年的努力才是

  • 便携式
  • 足够高效,不是C或C ++,但具有良好的性能(考虑到它仍然是vm)
  • 易于与
  • 集成
  • 广泛支持API或库

我的意思是,如果我打算发布一种新语言,为什么我不应该使用JVM?好的,还有其他的vms(llvm,parrot)但是JVM得到了广泛的支持,已知和测试。

它也很好用!缺少invokeDynamic将通过Java7的重新解决来解决这个问题。

答案 7 :(得分:4)

第二个问题:为什么重新发明轮子? Java VM有多种实现,包括高度优化的实现,并且至少有一种可用于任何平台附近的darned。

第一个问题第二个问题:对于编译为Java字节码并在VM上运行的代码,存在巨大的数量的第三方库和工具支持。当您创建一种新语言时,一个大问题是您必须创建人们可以使用它的所有内容,或者使其与其他东西兼容(例如链接到现有的静态C库,或.Net,或COM,或Java) VM)。 Java VM的开放规范(目前为止,erm),深度历史和广泛的适用性使其成为新语言的一个很好的目标。

答案 8 :(得分:4)

因为它不是微软的技术。正如其他人所提到的,使用JVM有很多很好的理由,但我认为如果微软的CLR是免费的,可移植的,以及开放的话,它会不那么受欢迎。

答案 9 :(得分:3)

明显的原因:

  1. 有一个庞大的现有类库
  2. 有多个VM实施,已广泛部署。
  3. 这些语言在语义上与您想象的更相似。
相关问题