编译成Java字节码并能在JVM上运行的语言

4

我是一名嵌入式程序员,正在使用嵌入式JVM工作。

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

主要好处很明显:这允许在受限设备上使用Java进行编程。 但是,我认为许多语言都可以编译成字节码,其中一些列在https://en.wikipedia.org/wiki/Java_bytecode中。 因此,理论上这些语言也可以用于编程。

我想获取一个通用语言列表,这些语言可以编译成字节码,并想知道您是否能够提供帮助。 例如,Python有专门的实现,可以将其缩小到Java字节码,如果我没记错的话,还存在将C编译成Java虚拟机的编译器之类的东西。

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


如果跨语言编译器没有创造性地利用JVM来支持JVM未设计的功能,我会非常惊讶。也就是说,它们很可能都使用了您的微型JVM不支持的功能。我建议您从常见的功能开始,并使用谷歌查看这些功能的趋势或点击量。 - Peter Lawrey
我投票关闭此问题,因为寻求列表的问题不符合Stackoverflow对特定可回答性的要求。 - Chris Stratton
FreePascal有JVM后端:http://wiki.freepascal.org/FPC_JVM - avra
1个回答

2
我同意你的整体想法,使用任何可以在JVM上运行的语言开发嵌入式应用程序会很好。但是有一些实际问题需要考虑,我认为这就是为什么没有主要供应商或开源倡议在此方面有任何积极/严肃项目的原因(据我所知)。
正如你所提到的,可以在嵌入式设备上运行的JVM实现,每个都有其自身的约束和限制。最明显的一个是某些包在运行时可能不可用。为了应用这样的约束条件,您应该在编译过程中控制它,或者有一个工具链(类似于SDK),它接受字节码并检查这样的约束条件。
当开发人员尝试使用特定语言可用的第三方库时,这种情况会很值得。很难猜测一个库是否对这样的框架安全使用。
对于开发人员来说,一个很棒的便利是让他们的IDE实时检查这些问题(类似于IntelliJ Idea中的检查)。这使得向使用这样的解决方案更加顺畅。但是再次出现的问题是,对于每种这样的语言,都需要有一个与其自己的语法兼容的特定插件。
此外,一些JVM语言实际上是现有语言的实现(例如Jython或JRuby),在支持该语言的库/语法更改方面大多数时间与原始语言不同步。
无论如何,我认为为了列出JVM语言列表,您可以在维基百科上轻松找到它们。也许你指的是那些可能值得考虑的具有大型社区和工具支持的语言。在我看来,您应该专注于以下JVM语言,因为它们可能值得包括在您的最终列表中:
- Groovy - Kotlin - Scala
这些都是纯JVM语言,只使用不同于Java的语法。
关于总体主题,我应该说,当您搜索嵌入式JVM实现时,您会注意到这也是一个相当学术的概念,并且在这些主题上有很多出版物,涉及整体架构、线程支持、工具链、错误处理、内存管理等。这意味着您应该具有非常丰富的经验/背景,既了解嵌入式系统又了解编程语言概念和实现,才能设计出适合这样的平台的适当架构。
关于您的最后一个问题,关于Python字节码和Java字节码之间的区别(如果我正确理解您的问题),这些概念上是相同的,但每个都有其自己的语法和约束条件。字节码概念是指编译器的输出软件,是原始代码的平台无关表示,并且可以在运行时由另一个软件组件(虚拟机)运行/解释。在Java世界中,此软件称为Java虚拟机(JVM)。我来自Java世界,所以不知道Python术语中它被称为什么,但应该类似(例如,Python虚拟机)。

我认为由于开发这样的工具链的复杂性,以及考虑到新的物联网和SoC设备的前所未有的发展,其中许多设备能够运行更高级别的操作系统,也许从长远来看,大多数开发人员更喜欢使用更高级别的API和SDK来开发更高端的设备。谁知道呢!在这种情况下,我们将会有一个与今天个人电脑(PCs)相似的情况。像C和Assembly这样的语言仍在使用中,但它们有自己的应用领域。我的意思是,随着时间的推移,抽象层被添加到前面的抽象层之上。嵌入式设备可能会出现同样的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接