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

33 java jvm scala sun clojure

有越来越多的编程语言(Scala,Clojure,...)出现,它们是为Java VM制作的,因此与Java Byte-Code兼容.

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

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

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

Joa*_*uer 54

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

那很容易:

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

  • 此外,让人们安装VM很困难.大多数人已经安装了Java VM. (19认同)
  • 并且您可以与针对同一VM的其他语言实现即时互操作性. (6认同)

b.r*_*oth 26

绩效和图书馆

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

  • @Bruno Rothgiesser:+1 ...由于JIT"编译器"可以击败C,在相当一些基准测试算法上的事实可以证明JVM现在有多好和成熟.另请参阅我的答案另一个原因:JVM也非常安全(没有缓冲区溢出/溢出). (4认同)
  • "JVM是世界上经过大量优化的软件之一." < - 启动时间除外:P (3认同)
  • @BillyONeal:是的,但是a)这个问题不断得到解决(你已经可以设置类共享.jsa类型存档,以便在已经运行JVM的情况下加快启动时间)并且每个版本都会越来越好(就像现在的Java一样)可以*在相当一些基准测试中击败*C)和b)如果您正在编写想要链接的"grep"或"wc"等命令行工具,这真的只是一个问题.在服务器端,这一点没有实际意义,老实说,在桌面方面也是如此(我们正在销售用Java编写的商业软件).但是,同意,当我需要一个快速的命令行工具我在Bash写. (2认同)

Syn*_*r0r 19

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

因为它坚如磐石,所以人们有以下几个国家:

  • 他们的钱包里的Java智能卡作为他们的国民身份证或他们的医疗保健系统卡(或两者)
  • 手机有一个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不受缓冲区溢出/溢出的影响.这是巨大的.这实际上比大多数人意识到的还要大.

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

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

JVM对此免疫.

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

它是一种非常可靠和安全(正确使用时)的技术.这就是为什么它是如此广泛双方精通技术的使用(Java是巨大的,在谷歌,从Gmail到的Android到GWT等)和技术-不说,精明的公司.

实际上可以说Java的成功来自JVM,而"Java VM"比"Java语言"更重要.

JVM是过去20年来最大的"语言"成功案例.这是应得的.这是留下来:)


Tom*_*vic 15

  • 已经看到了15年的改进,性能改进等.
  • 免费和开源的
  • 可在各种平台上运行
  • 在单个VM上支持多种语言
  • 主要语言(Java)是最广泛使用的语言之一,因此Java + JVM是一个相对安全的入口点
  • 相当安全和健壮


Pau*_*lin 5

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

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


Joo*_*kka 5

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

它是自由开放的,成熟的(稳定的,完整的),周围的生态系统是巨大的.

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

编写与JVM一样好的VM很难.JVM的规范及其实现已经被业内最优秀的人们精心打造了十多年.


Jac*_*ack 5

因为Java VM有近20年的努力

  • 手提
  • 足够高效,而不是C或C++但具有良好的性能(考虑到它仍然是一个虚拟机)
  • 易于集成
  • 得到API或库的广泛支持

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

它也很好用!缺乏invokeDynamic将通过Java7的重新解决比这更好解决..