为什么为Java VM编写如此多的新语言?
越来越多的编程语言(Scala,Clojure,…)出现在Java VM中,因此与Java字节码兼容。
我开始问自己:为什么Java VM?
-
是什么让它变得如此强大或stream行,以至于有了新的编程语言,这些编程语言似乎越来越受欢迎?
-
为什么他们不为新语言写一个新的虚拟机?
为什么他们不为新语言写一个新的虚拟机?
那个很简单:
- 写一个好的虚拟机很难
- 写一个快速的虚拟机是很难的
- 使虚拟机在多种体系结构下运行是困难的
- 现有的库与现有的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是免费的,便携式的和开放的,那么我认为它会稍微不受欢迎。
明显的原因:
- 有一个巨大的现有的类库
- 有多个虚拟机实施,这是广泛部署。
- 这些语言在语义上与Java相比可能比您想象的更类似。