V8 (JavaScript引擎)

V8係一個由Google開發嘅開源JavaScript引擎，用喺Google Chrome同埋Chromium入面。  Lars Bak係呢個項目嘅組長，用咗V8發動機嘅名做其佢嘅名。

運作方法 
V8喺執行之前將JavaScript編譯咗做機器碼，而唔係位元組碼或者解釋執行佢，咁樣做可以提升效能。更進一步，用好似內聯緩存等方法嚟提高性能。有咗呢啲功能，JavaScript程式同V8引擎嘅速度同二進制編譯差唔多。  

傳統嘅Javascript係動態語言，又可以叫做Prototype-based Language，JavaScript繼承方法係用prototype，透過指定嘅prototype屬性，就可以指定要繼承嘅目標。屬性可以喺運行嗰陣添加到或喺對像入面刪除，引擎會為執行緊嘅物件建立一個屬性字典，新嘅屬性都要喺字典度搵屬性係內存入面嘅位置。V8為object新增屬性嘅時候，就用上次嘅hidden class做父類別，整新屬性嘅hidden class嘅子類別，咁樣嘅話屬性訪問就唔洗喺動態字典入面搵。

為咗縮短由垃圾回收造成嘅停頓，V8用stop-the-world,、generational、accurate嘅垃圾回收器。喺執行回收嗰陣會暫時停止程式，而且淨係處理物件堆疊。仲會收集RAM入面所有物件嘅指標，可以避免RAM爆煲嘅情況。V8組譯器係基於Strongtalk組譯器。

用法
V8 可以編譯做 32 位同埋 64 位版本嘅 x86、ARM 或者 MIPS 指令集架構； 佢仲畀人移植咗去 PowerPC 和 IBM s390 用喺伺服器。

V8 可以喺瀏覽器入面用，亦都可以集成去獨立嘅項目入面。V8 用喺以下軟件：
 基於Chromium嘅 網頁瀏覽器 
Google Chrome
Brave
Opera
Vivaldi
Microsoft Edge。
 Couchbase 數據庫伺服器
 Deno 運行嗰陣嘅環境
 Electron 桌面應用程序框架，畀 Atom 同埋 Visual Studio Code 文本編輯器用
 MarkLogic 數據庫伺服器
 NativeScript 應用程式框架
 Node.js 運行環境
 Qt Quick運行環境

設計 
V8 先用自己嘅解析器生成 abstract syntax tree。 然後，Ignition 用內部 V8 字節碼格式由呢個語法樹生成 bytecode。 TurboFan 將呢行字節碼編譯做機器碼。換句話講，V8 喺執行之前用 just-in-time 編譯 將 ECMAScript 直接編譯做本機 machine code。 編譯之後嘅代碼基於代碼執行配置文件嘅啟發式，喺運行嗰陣動態咁進行額外優化。使用嘅優化技術包括 inlining、elision 同埋 inline caching。garbage collector 係 generational  增量 收集器。

Google Chrome
 Chromium
 Dart
 JavaScript

Google Code project page
 cproxyv8及v8-juice are C++ libraries for extending v8, e.g. to assist in binding client-side C++ classes to JavaScript.
 v8cgi is a v8-based framework for serving web application written in JavaScript.
 node.js is a toolkit for writing performant non-blocking event-driven network servers in JavaScript.
 Inside V8 - A Javascript Virtual Machine

Google
JavaScript