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 |