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

标签 java jvm embedded

我是一名嵌入式程序员,使用的是嵌入式 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 语言,因为它们可能值得包含在您的最终列表中:

  • 时髦
  • Kotlin
  • 斯卡拉

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

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

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

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

关于java - 编译为 Java 字节码并可以在 JVM 上运行的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48091295/

相关文章:

java - 在 Java 类文件的字节码版本之间切换

java - 循环后清除字符串缓冲区/构建器

java - 什么是 JVM 指令?

Java代码-编译时优化

java - 来自 Java 插件的 Gradle 任务测试的 JVM 分支选项

c - FreeRTOS 中队列数组的问题

linux - 嵌入式 Linux 数据库和架构

assembly - PCIe 卡上的计算机

java - 如何使用java处理selenium中动态生成的复选框

java - 如何消除大尺寸java swing标签中的间隙