我同意你的整体想法,使用任何可以在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这样的语言仍在使用中,但它们有自己的应用领域。我的意思是,随着时间的推移,抽象层被添加到前面的抽象层之上。嵌入式设备可能会出现同样的情况。