为什么为Java VM编写如此多的新语言?

越来越多的编程语言(Scala,Clojure,…)出现在Java VM中,因此与Java字节码兼容。

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

  • 是什么让它变得如此强大或stream行,以至于有了新的编程语言,这些编程语言似乎越来越受欢迎?

  • 为什么他们不为新语言写一个新的虚拟机?

10 Solutions collect form web for “为什么为Java VM编写如此多的新语言?”

为什么他们不为新语言写一个新的虚拟机?

那个很简单:

  • 写一个好的虚拟机很难
  • 写一个快速的虚拟机是很难的
  • 使虚拟机在多种体系结构下运行是困难的
  • 现有的库与现有的VM一起工作
  • 现有的工具(debugging器,分析器,编译器,…)与现有的虚拟机一起工作
  • 让人们安装一个新的虚拟机很难
  • 与其他语言即时互操作性针对相同的虚拟机
  • 现有的虚拟机已经过全面的生产testing

性能和图书馆

  • JVM是全球最受重视的软件之一。
  • 利用大量的Java类库。
  • JVM中的Java和非Java语言之间的交互作用的事实。

JVM是坚如磐石的,可以从最小的Java智能卡(好的,一个小的虚拟机)到最可能想象的最大的集群超级计算机。

因为它是坚如磐石的,所以人们都有整个国家:

  • 在他们的钱包中的Java智能卡作为其国民身份证或作为他们的医疗系统卡(或两者)
  • 一个具有JVM的手机(或者Dalvik VM,基本上是Google的Java VM的更新版本)。 哎呀,iPhone有一个ARM CPU 优化来运行Java字节码 (但出于商业原因,苹果公司决定不在iPhone / iPad上提供Java)。
  • 一个蓝光播放器当然有Java(因为它是蓝光规范的一部分)。

我正在用Java开发商业软件:我们在Windows和OS X上销售,但是我们都在Linux上开发。 它只是工作。 而且它也可以在Solaris上运行,这是因为我们正在瞄准JVM:再见可移植性问题。 只要平台有虚拟机,软件就可以工作。

那么我不敢相信有人提到它:从安全的angular度来看这是一个非常好的开始。

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

我记得Linux上的唯一“Java”缓冲区溢出(因为安全问题而促使我升级)实际上是一个导致任意代码执行的缓冲区溢出… C语言库(zlib,如果我没有记错的话,返回Linux上的Java仍然默认那个lib)。

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

JVM是免疫的。

除此之外,由于它的devise,它可以很容易地插入各种工具,如轮廓仪和debugging器。

这是一个非常坚实和安全(当正确使用)的技术。 这就是为什么它被技术精通(Java在Google,从GMail到他们的Android到GWT等等)以及不懂技术的公司中广泛使用。

实际上,Java的成功来自JVM,“Java VM”比“Java语言”重要得多。

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

  • 已经看到了15年的改进,性能改进等。
  • 是免费和开源的
  • 运行在各种各样的平台上
  • 在单个虚拟机上支持多种语言
  • 主要语言(Java)是最stream行的语言之一,所以Java + JVM是一个相对安全的切入点
  • 合理安全和强大

因为别人已经煞费苦心,确保它在每个主要平台上运行良好。

如果你编写自己的虚拟机,你必须为Linux / Unix / BSD编写一个,一个用于Mac,另一个用于Windows,而且你必须在所有这些平台上支持虚拟机,并支持你的语言编译器和运行时库。 如果您使用Java VM,第一部分将由Oracle,IBM和Apple负责。

因为Java VM有近20年的努力

  • 手提
  • 足够高效,而不是C或C ++,但具有良好的性能(考虑到它仍然是一个VM)
  • 容易与之整合
  • 广泛支持API或库

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

它的作品也相当不错! invokeDynamic的缺乏将会比Java7更好地解决。

是什么让它变得如此强大或stream行,以至于新的编程语言似乎也越来越stream行?

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

为什么他们不为新语言写一个新的虚拟机?

像JVM一样编写一个VM是很难的。 JVM的规格及其实施已经由行业内最优秀的人士进行了十多年的改进。

第二个问题:为什么重新发明轮子? Java VM有多种实现,其中包括高度优化的实现,至less有一个可以在任何平台附近使用。

第一个问题第二:编译成Java字节码并在VM上运行的代码有大量的第三方库和工具支持。 当你创build一个新的语言时,一个大问题就是你必须创build一些人们可以使用的东西,或者使其与其他东西兼容(比如链接到现有的静态C库,或者.Net,或者COM,或者Java VM)。 Java VM的开放规范(至今为止),深厚的历史和广泛的适用性使其成为新语言的一个很好的目标。

因为它不是微软的技术。 正如其他人所说的,使用JVM有很多很好的理由,但是如果微软的CLR是免费的,便携式的和开放的,那么我认为它会稍微不受欢迎。

明显的原因:

  1. 有一个巨大的现有的类库
  2. 有多个虚拟机实施,这是广泛部署。
  3. 这些语言在语义上与Java相比可能比您想象的更类似。
  • 如何在库中支持多个Scala版本
  • param:_ *在Scala中的含义是什么?
  • Java编译速度vs Scala编译速度
  • 什么types用于存储在Scala中的内存中的可变数据表?
  • 高性能并发MultiMap Java / Scala
  • 是不是在尾部recursion风格的代码?
  • Scalamacros和JVM的方法大小限制
  • 有人可以向我解释无形文库的用途吗?
  • 如何使用Spark DataFrame查询JSON数据列?
  • 在scala中的string连接和Java一样昂贵吗?
  • Scala PackratParser忽略失败分析器