编译为Java Bytecode并可在JVM上运行的语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译为Java Bytecode并可在JVM上运行的语言相关的知识,希望对你有一定的参考价值。

我是一名嵌入式程序员,使用嵌入式JVM。

这样可以在受限设备上运行Java文件。这些Java文件首先被编译为字节码为.class文件,然后进一步优化并上传到具有微JVM以运行优化字节码的设备。微JVM不支持所有功能,例如,没有反射。

主要好处是显而易见的:这允许用Java编程受限设备。但是,我认为有很多语言编译成字节码,有些是列出的https://en.wikipedia.org/wiki/Java_bytecode。所以理论上这些语言也可以用来编程。

我想获得一个编译为字节码的常用语言列表,并想知道你是否可以提供帮助。例如,如果我没有弄错的话,Python有一些特殊的实现可以减少到Java Bytecode,并且存在类似C到Java虚拟机编译器的东西。

那么您认为在设备上尝试和运行哪种语言是合乎逻辑的?有关如何或类似经历的任何指示?另外,我不清楚在(Python)字节码和Java字节码之间阅读维基百科有什么区别,有人可以帮忙解释一下吗?

答案

我同意你的总体想法,使用可以在JVM上运行的任何语言开发嵌入式应用程序会很不错。但是你应该考虑一些实际问题,我认为这就是为什么没有主要供应商或开源计划在这方面有任何积极/认真的项目(据我所知)。

正如您所提到的,可以在嵌入式设备上运行的JVM实现,每个都有自己的约束和限制。最明显的一个是某些包在运行时可能无法使用。为了应用这样的约束,你应该在编译过程中控制它,或者有一个工具链(一种类型的SDK)接受字节码并检查这些约束。

当开发人员尝试使用可用于该特定语言的第三方库时,这种情况是值得的。猜测一个库是否可以安全地用于这种框架并不容易。

对开发人员来说,一个很棒的工具就是让他们的IDE动态检查这些问题(类似于IntelliJ Idea中的检查)。这使得使用这种解决方案变得更加顺畅。但问题是,对于每种这样的语言,需要有一个与他们自己的语法兼容的特定插件。

实际上实现现有语言的一些JVM语言(例如Jython或JRuby)在支持该语言的库/语法更改的情况下大多数时候与原始语言不同步。

无论如何,我认为为了获得JVM语言列表,您可以在维基百科上轻松找到它们。也许你的意思是那些通过拥有大量社区和工具支持而值得在这方面考虑的人。在我看来,您应该关注以下JVM语言,这些语言可能值得包含在最终列表中:

  • Groovy的
  • 科特林
  • 斯卡拉

这些都是纯JVM语言,只使用与Java不同的语法。

关于这个主题,我应该说当你搜索嵌入式JVM实现时,你会注意到它也是一个相当学术性的概念,他们在这个主题中有很多关于整体架构,线程支持,工具链,错误的出版物处理,内存管理等。这意味着您应该在嵌入式系统和编程语言概念和实现方面拥有非常好的经验/背景,以便能够为这样的平台设计适当的架构。

关于你关于Python字节码和Java字节码之间差异的最后一个问题(如果我正确理解你的问题),这些问题在概念上是相同的,但每个都有自己的语法和约束。字节码概念指的是作为编译器输出的软件,并且是原始代码的平台独立表示,并且可以由运行时由作为虚拟机的另一软件组件运行/解释。在Java世界中,该软件称为Java虚拟机(JVM)。我来自Java世界所以我不知道它在Python词汇表中叫什么,但它应该是类似的东西(例如Python虚拟机)。

我认为由于开发这种工具链的复杂性以及新的物联网和SoC设备的前所未有的发展,其中许多能够运行更高级别的操作系统,从长远来看,大多数开发人员更愿意开发更多使用更高级API和SDK的高端设备。谁知道!在这种情况下,我们将遇到与今天PC相同的情况。 C和汇编等语言仍在使用,但它们有自己的应用程序域。我的意思是在整个时间里,抽象层被添加到前一层之上。嵌入式设备也会发生同样的情况。

以上是关于编译为Java Bytecode并可在JVM上运行的语言的主要内容,如果未能解决你的问题,请参考以下文章

深度详解JVM类字节码

java面试题02

java之java代码的执行机制

JAVA语言开发基本原理

JVM内存分区

JVM运行时数据区