由于 JavaScript 的日益流行,我发现(即使在同一次演讲中)听到关于 JavaScript引擎、JavaScript虚拟机或 JavaScript解释器,在相同的上下文中并提到相同的东西很有趣。
因此,我试图做一些研究,为什么所有这些流行语会同时共存(一定是有原因的),以及它们之间是否存在一些真正的(尽管微小的)差异。
我试图从许多不同的来源(我在以下几行中引用)总结到目前为止我学到的东西。如果我对某些事情有错误/误导,请随时纠正我。
尽管我发现它们的运行时职责基本相同,但我也发现了一些主要区别:
处理虚拟机
- 是最复杂的(甚至实现了 IO、虚拟指令集 等)
- 始终包括口译员 + 中间语言
- 除此之外还可能包括编译(即时和/或动态重新编译)
- 应用程序仅在 VM 进程内作为线程运行
- 耦合到运行时环境
- 示例:Java 虚拟机、Dalvik 虚拟机
运行时
语言引擎
- 更轻巧
- 可以使用解释器或编译(即时和/或动态重新编译)
- 与底层环境/操作系统解耦
- 示例:所有 JavaScript 引擎、Zend 引擎
问题:
上面的列表是否准确,或者它只是基于使用相同面额的大多数常见运行时系统之间完全巧合的相似性的副产品?
还有其他值得注意的区别吗?