编译为 Java 字节码并可在 JVM 上运行的语言



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

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

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

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

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

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

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

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

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

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

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

  • 槽的
  • 科特林
  • 斯卡拉

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

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

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

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

最新更新