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

编译为Java字节码并可在JVM上运行的语言,java,jvm,embedded,Java,Jvm,Embedded,我是一名嵌入式程序员,使用嵌入式JVM 这允许在受约束的设备上运行Java文件。 这些Java文件首先被编译成字节码,然后被进一步优化并上传到有微型JVM运行优化字节码的设备上。 micro JVM不支持所有功能,例如无反射 主要的好处是显而易见的:这允许用Java为受约束的设备编程。 然而,我认为很多语言都可以编译成字节码,其中一些已经列出。 所以理论上这些语言也可以用来编程 我想获得一份编译成字节码的通用语言列表,不知您是否能提供帮助。 例如,如果我没有弄错的话,Python有一些特殊的实现

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

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

主要的好处是显而易见的:这允许用Java为受约束的设备编程。 然而,我认为很多语言都可以编译成字节码,其中一些已经列出。 所以理论上这些语言也可以用来编程

我想获得一份编译成字节码的通用语言列表,不知您是否能提供帮助。 例如,如果我没有弄错的话,Python有一些特殊的实现,可以简化为Java字节码,而且还存在C到Java虚拟机编译器之类的东西

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

我同意你的总体想法,使用任何可以在JVM上运行的语言开发嵌入式应用程序都很好。但是有一些实际的问题你应该考虑,我认为这就是为什么没有一个主要的供应商或开源项目在这方面有任何积极/认真的项目(据我所知)。p> 正如您所提到的,可以在嵌入式设备上运行的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和汇编这样的语言仍在使用,但它们有自己的应用领域。我的意思是,在整个过程中,抽象层都被添加到上一层之上。同样的事情也会发生在嵌入式设备上。

如果跨语言编译器没有创造性地利用JVM来支持JVM不是为之设计的功能,我会非常惊讶。i、 他们很可能都使用了micro JVM不支持的功能。我建议你从常见的问题开始,我会使用谷歌来查看这些问题的趋势或点击率。我投票将这个问题作为离题题来结束,因为寻求列表的问题不符合特定回答的Stackoverflow要求。FreePascal有JVM后端: