当前位置:  开发笔记 > 编程语言 > 正文

为什么我们需要其他JVM语言

如何解决《为什么我们需要其他JVM语言》经验,为你挑选了3个好方法。

我在这里看到除了Java之外还有大量语言在JVM上运行.我对JVM中运行的其他语言的整个概念感到有点困惑.所以:

使用JVM的其他语言有什么好处?

为JVM编写语言/编译器需要什么(在高级术语中)?

如何在JVM中用一种语言(Java除外)编写/编译/运行代码?


编辑:在接受的答案中回答了3个跟进问题(最初的评论).他们在这里重印了易读性:

如果用JPython编写的应用程序如何与Java应用程序交互?

另外,JPython应用程序可以使用任何JDK函数/对象吗?

如果它是Jaskell代码,那么它是一种函数式语言会不会使它与JDK不兼容?



1> toluju..:

分别解决您的三个问题:

使用JVM的其他语言有什么好处?

这里有两个因素.(1)为什么JVM使用Java以外的语言,以及(2)为什么在JVM上运行另一种语言而不是运行不同的语言?

    其他语言可以满足其他需求.例如,Java没有对闭包的内置支持,这一功能通常非常有用.

    在JVM上运行的语言与在JVM上运行的任何其他语言都是字节码兼容的,这意味着用一种语言编写的代码可以与用另一种语言编写的库交互.

为JVM编写语言/编译器需要什么(在高级术语中)?

JVM读取字节码(.class)文件以获取它需要执行的指令.因此,任何要在JVM上运行的语言都需要编译为符合Sun规范的字节码.此过程类似于编译为本机代码,不同之处在于代码编译为由JVM解释的指令,而不是编译为CPU理解的指令.

如何在JVM中用一种语言(Java除外)编写/编译/运行代码?

与在Java中编写/编译/运行代码的方式非常相似.为了让你的脚湿透,我建议你看看Scala,它在JVM上完美运行.

回答你的后续问题:

如果用JPython编写的应用程序如何与Java应用程序交互?

这取决于实现选择弥合语言差距.在您的示例中,Jython项目有一个简单的方法来执行此操作(请参阅此处):

from java.net import URL
u = URL('http://jython.org')

此外,JPython应用程序可以使用任何JDK函数/对象吗?

是的,见上文.

如果它是Jaskell代码,那么它是一种函数式语言会不会使它与JDK不兼容?

例如,Scala(上面的链接)实现了功能特性,同时保持了与Java的兼容性.例如:

object Timer {
  def oncePerSecond(callback: () => unit) {
    while (true) { callback(); Thread sleep 1000 }
  }
  def timeFlies() {
    println("time flies like an arrow...")
  }
  def main(args: Array[String]) {
    oncePerSecond(timeFlies)
  }
}



2> Jaykul..:

您需要JVM上的其他语言,原因与您需要多种编程语言相同:不同的语言更好地解决了不同的问题...静态类型与动态类型,严格与懒惰......声明性,势在必行,面向对象...等

通常,为JVM(或.Net CLR)上运行的另一种语言编写"编译器"本质上是将该语言编译为java字节码(或者在.Net,IL的情况下)而不是汇编的问题. /机器语言.

也就是说,为JVM编写的许多额外语言都没有编译,而是解释脚本语言...



3> Mike Tunnicl..:

考虑到这一点,您可以考虑设计一种新语言,并希望它在带有JIT和GC的托管运行时中运行.然后考虑你可以:

(a)编写自己的托管运行时(VM)并处理各种技术难题,这些问题无疑会导致许多错误,性能不佳,线程不正确以及大量的可移植性工作

要么

(b)将您的语言编译为可以在Java VM上运行的字节码,该字符码已经非常成熟,快速并且在许多平台上得到支持(有时候有多个供应商强制选择).

鉴于JavaVM字节码与Java语言没有太大的联系,以至于过度限制了您可以实现的语言类型,因此它一直是想要在VM中运行的语言的流行目标环境.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有