Java虚拟机语言是否不可知?

Ber*_*own 10 java language-agnostic stack forth

可以肯定地说Java虚拟机"最初"是为Java编程语言设计的,但是现在,其他开发人员已经能够编写编译成Java字节码的编程语言,如Scala,Jython和JRuby.

Java字节码中仍然存在"面向对象"的引用,如接口,方法,字段.例如,invokespecial是对'object'方法的调用.

它不是纯粹的语言无关指令集的纯栈虚拟机.例如,纯FORTH实现只能进行堆栈操作.

问题是JVM语言与否是无关的?

Ern*_*ill 9

JVM绝对不是语言无关的,有些语言无法在其上有效实现.例如,JVM不提供内存寻址操作,因此像C这样的低级语言的实现效率非常低.但是它的原语集能够支持许多流行语言,其功能与Java不同,给出了一个适当的智能编译器.可以正确实现的语言不一定只是具有语法糖的Java; 当然,从Java中获得的差异越大,实现该语言的难度就越大

  • Java仍然是一种命令式,面向对象的语言.JRuby有类似的程序流程.使用对象的参数调用方法并重复.可能很难在Java虚拟机之上实现像Haskell或Erlang这样的东西而不会出现黑客攻击. (2认同)
  • 如果需要,可以在Java中为其他语言编写解释器.这就是他们如何设法在JVM中获取多种语言,特别是当该语言假设有关JVM不适用的机器时.由于所有图灵完备语言都具有(可证明的)平等(表达)能力,因此每种图灵完备语言都应该存在一些Rube Goldberg解决方案,以模拟另一个图灵完整语言的操作. (2认同)

pap*_*pap 4

从JVM和java字节码是图灵完备的意义上来说,任何其他图灵完备的语言都可以转换并编译为java字节码并在JVM上运行。这可能效率极低,但并非不可能。至于“不可知论者”最严格的定义,并不存在这样的事情。在硬件级别,所有处理器都有一组定义的它们支持的二进制指令,因此在某些时候,任何语言都必须转换为与其应该执行的硬件兼容的汇编语言。

编辑:JVM 不是在真空中开发的,它是与 JAVA 编程语言结合开发的,因此 Java 语言很大程度上影响了 Java 字节码和 JVM 的设计。因此,从这个意义上说,您可以说 JVM 是在设计时考虑到 Java 的。但事实上,在架构中,JVM 有意识地与 Java 语言解耦(通过中间字节码格式),因此设计中的某些元素考虑了可能的替代语言。