Runtime, Engine, VM 的區別是什麼?

1. 通常說 V8 是 JS 的 Engine,JVM 是 JAVA VM,二者區別在哪裡呢?

2. Node.js 在官網上介紹稱:

Node.js? is a platform built on Chrome"s JavaScript runtime for easily building fast, scalable network applications.

其中 "Chrome"s JavaScript runtime" 的鏈接指向了 https://code.google.com/p/v8/, 這裡是否表達錯誤?


A JavaScript engine is a virtual machine which interprets and executes JavaScript.

A Java virtual machine (JVM) is an abstract computing machine that enables a computer to run a Java program.

In computer science, run time, runtime or execution time is the time during which a program is running (executing), in contrast to other program lifecycle phases such as compile time, link time and load time.

以上來自維基百科~

看起來 engine 和 vm 是一個東西, runtime 是說一個程序正在執行的狀態。

所以,Chrome"s JavaScript Runtime 指的就是 Chrome 運行 JS 時的環境,也就是 vm ,也就是 engine。

以上為個人理解,可能狹隘了,有誤請拍。


這就是個WiFi和WLAN關係的問題嘛。

Runtime是指用於支持程序運行時的組件,它可以是個Engine和/或VM。

VM是一種系統抽象,它提供代碼執行所需的API環境。Engine是一種處理抽象,它負責將代碼變為底層可執行代碼。

一個運行時,可以是VM和Engine中的一種,也可以同時是兩者。當然也可以兩者都不是。

以題主的例子而言,V8是JS的Engine,但同時它也提供了環境,所以它也是VM。

JVM是Java的VM,但它也負責代碼的轉換,所以它也是Engine。

之所以習慣上JS的稱Engine,是因為JS最初並沒有明確的VM概念,也就是說它並沒有明確地定義一套環境。而Java的稱VM,也是因為早期JVM要強調它提供了環境,而不光光用來解釋代碼。

至於其他的還有一些例子:

VC++ Runtime,它提供了API環境,但它並不抽象系統,也不翻譯代碼,所以它是另一種Runtime。類似的還有VB Runtime和MFC。

.Net Framework,它提供了API,抽象了系統,翻譯代碼,之所以叫它Framework大概是為了顯得大氣。


都是解釋器,叫VM的是因為它解釋的東西更加底層

runtime也可能指一堆標準庫函數


runtime指語言標準庫的實現。

VM指虛擬機,可以模擬內存、進程、線程等。

其他非runtime或VM底層設施,都可以叫Engine。


三個名字大部分是比較重疊的,打個比方,同樣一篇文章內容,三個人取了三個不同的標題:

《部門下半年工作要點》

《部門下半年整體計劃》

《部門下半年戰略謀劃》

------

取第一個標題的人比較謙虛樸實一點比如,最後一個比較指點江山激揚文字一點。

取名 runtime 或者 toolkit 或者 library 的人,會比較強調自己的協作性,是協助別人的小工具。

取名 engine 的人,會比較強調自己的重要性,強調大海航行全靠舵手。。。。。

東西相同,心態不同,自我認識也不同。

比如你會發現很牛逼的 runtime/toolkit 同時你也會發現很弱智的 engine,比如 OpenGL 意思是 Graphics Library,定位是一個 library,而使用 opengl 的 cocos2d 定位為引擎。名字從來都是表達希望而不是客觀描述能力的東西。比如:古巨基,他不一定就有 巨基。


推薦閱讀:

在不使用node的情況下,開發者怎樣在js里調用一個自己實現的c/c++函數?
新手應該如何讀Google V8引擎源代碼?
js中為什麼沒有自乘自除?只有自加自減,為什麼?
如何評價Microsoft的開源項目napajs?
HSimulate這條Hydrogen里的instruction到底是什麼意思?

TAG:GoogleChrome | JavaScript | Nodejs | V8 | VM |