可以说Java虚拟机最初是为Java编程语言设计的,但现在其他开发者也能够编写编译成Java字节码的编程语言,例如Scala,Jython和JRuby。
Java字节码中仍然包含面向对象的引用,如接口,方法,字段。例如invokespecial是对“对象”方法的调用。
它不是一个纯栈式虚拟机,也没有纯语言无关指令集。例如,一个纯FORTH实现只会有堆栈操作。
问题在于JVM是否是具备语言无关性的?
可以说Java虚拟机最初是为Java编程语言设计的,但现在其他开发者也能够编写编译成Java字节码的编程语言,例如Scala,Jython和JRuby。
Java字节码中仍然包含面向对象的引用,如接口,方法,字段。例如invokespecial是对“对象”方法的调用。
它不是一个纯栈式虚拟机,也没有纯语言无关指令集。例如,一个纯FORTH实现只会有堆栈操作。
问题在于JVM是否是具备语言无关性的?
JVM并非支持所有编程语言,有些语言在其上不能高效实现。例如,JVM不提供内存寻址操作,因此一个低层次的语言如C在JVM上的实现将会非常低效。但是其原始操作的集合足以支持许多不同于Java的流行语言,只要有一个足够聪明的编译器。可以被良好实现的语言并不一定只是带语法糖的Java;但是当然,你离Java越远,实现这个语言就越难。
char*
修改 int
部分的 C 代码相当的 JVM 兼容代码,而 C 编译器将 CHAR_MAX 定义为 255,将 UINT_MAX 定义为 4294967295,那么除了使用多个 byte[]
元素来存储每个 C int
,或者使用每个 int[]
元素来保存多个 C char
的方法外,还有哪些替代方案呢?我认为,如果 C 实现规定所有 int 指针都必须是长字对齐的,那么 int-packing 会更快。 - supercat