JVM:JVM指令实现可以用什么语言?

JVM: what language can be used for JVM instruction implementation?

摘自 JVM 官方 Oracle 文档:

An implementation of the Java Virtual Machine may use conventional stacks, colloquially called "C stacks," to support native methods (methods written in a language other than the Java programming language). Native method stacks may also be used by the implementation of an interpreter for the Java Virtual Machine's instruction set in a language such as C.

所以,基本上只要 JVM 在 C 中实现其指令集,那么实现就可以使用本地方法堆栈。这让我想到 JVM 指令集还可以用哪些其他语言实现,以及在这些情况下使用什么样的堆栈?

So, basically whenever JVM implements its instruction set in C then the implementation can use native method stack.

JVM 规范指出,当 JVM 以“ C 之类的语言”(已强调)实现时,它可能会使用所谓的“C 堆栈”。这几乎毫无意义。最合理的解释是,如果实现特定 JVM 的语言的实现本身依赖于 C 堆栈,那么允许 JVM 本身依赖 C 堆栈。

引用的上下文是对 JVM 使用的内存区域的讨论,所以要点很简单,JVM 可能会将其一些运行时内存用于 C 堆栈。 Java 堆栈有一个完全独立的规定,尽管规范不要求它与使用 C 堆栈的 JVM 中的 C 堆栈区域不同。

但是请注意,尽管人们通常认为 C 本身被认为是一种语言,例如 C,但它的规范没有任何关于堆栈的内容。 “C 堆栈”不是 C 的 属性,而是硬件和 ABI。

This makes me think about what other languages can JVM instruction set be implemented in

原则上,JVM 可以用任何图灵完备的语言来实现。示例包括 C、C++、Fortran、Python、Lisp、Perl、Ruby、Bash、BASIC、Java 本身,以及过去、现在和未来的许多其他语言。有些人比其他人更有吸引力。

and what kind of stack is used in those cases ?

如果所选语言的所选实现使用 C 堆栈,则 JVM 可以 为 C 堆栈保留 space。还有每个 JVM 都有的 Java 栈。 JVM 规范没有明确规定任何其他类型的堆栈。