V8 (JavaScript引擎)
V8係一個由Google開發嘅開源JavaScript引擎,用喺Google Chrome同埋Chromium入面[1]。 Lars Bak係呢個項目嘅組長,用咗V8發動機嘅名做其佢嘅名[2]。
Google V8 JavaScript引擎標誌 | |
開發者 | |
---|---|
初始版本 | 2008年9月2號 |
最新發布 | 9.9 |
程式語言 | C++ |
作業系統 | Microsoft Windows、Mac OS X、Linux、FreeBSD、Android、webOS |
軟件類別 | JavaScript引擎 |
許可協議 | BSD許可證 |
庫 |
運作方法
編輯V8喺執行之前將JavaScript編譯咗做機器碼,而唔係位元組碼或者解釋執行佢,咁樣做可以提升效能。更進一步,用好似內聯緩存(inline caching)等方法嚟提高性能。有咗呢啲功能,JavaScript程式同V8引擎嘅速度同二進制編譯差唔多。 [3]
傳統嘅Javascript係動態語言,又可以叫做Prototype-based Language,JavaScript繼承方法係用prototype,透過指定嘅prototype屬性,就可以指定要繼承嘅目標。屬性可以喺運行嗰陣添加到或喺對像入面刪除,引擎會為執行緊嘅物件建立一個屬性字典,新嘅屬性都要喺字典度搵屬性係內存入面嘅位置。V8為object新增屬性嘅時候,就用上次嘅hidden class做父類別,整新屬性嘅hidden class嘅子類別,咁樣嘅話屬性訪問就唔洗喺動態字典入面搵。
為咗縮短由垃圾回收造成嘅停頓,V8用stop-the-world,、generational、accurate嘅垃圾回收器[4]。喺執行回收嗰陣會暫時停止程式,而且淨係處理物件堆疊。仲會收集RAM入面所有物件嘅指標,可以避免RAM爆煲嘅情況。V8組譯器係基於Strongtalk組譯器[5]。
用法
編輯V8 可以編譯做 32 位同埋 64 位版本嘅 x86、ARM 或者 MIPS 指令集架構; 佢仲畀人移植咗去 PowerPC[6] 和 IBM s390[7][8] 用喺伺服器。[9][10]
V8 可以喺瀏覽器入面用,亦都可以集成去獨立嘅項目入面。V8 用喺以下軟件:
設計
編輯V8 先用自己嘅解析器生成 abstract syntax tree。[15] 然後,Ignition 用內部 V8 字節碼格式由呢個語法樹生成 bytecode。[16] TurboFan 將呢行字節碼編譯做機器碼。換句話講,V8 喺執行之前用 just-in-time 編譯 將 ECMAScript 直接編譯做本機 machine code。[17] 編譯之後嘅代碼基於代碼執行配置文件嘅啟發式,喺運行嗰陣動態咁進行額外優化(和重新優化)。使用嘅優化技術包括 inlining、elision 同埋 inline caching。garbage collector 係 generational 增量 收集器。[18]
參考
編輯- ↑ Philipp Lenssen (2008-09-01). "Google on Google Chrome - comic book". Google Blogoscoped. 原先內容歸檔喺2015-06-18. 喺2008-09-01搵到.
- ↑ Bynens, Mathias (September 11, 2018). "Celebrating 10 years of V8". 喺2019-05-21搵到.
- ↑ Seeley, Rich; Jack Vaughan (5 September 2008). "Google Chrome shifts architects' equations as V8 powers the browser". SOA News. 原著喺2010-04-27歸檔. 喺2008-09-07搵到.
- ↑ "V8 JavaScript Engine: Introduction". Google Code. Google. 原著喺2010-06-06歸檔. 喺2010-08-17搵到.
- ↑ "v8 Licenses". 原著喺2010年7月22號歸檔. 喺2022年4月14號搵到.
- ↑ 〈GitHub - ibmruntimes/v8ppc:將 Google V8 javascript 引擎移植到 PowerPC® .〉。2019-04-21 –透過GitHub。
- ↑ 〈將 Google V8 JavaScript 引擎移植到 z/OS。Linux on Z 端口在社區中維護:ibmruntimes/v8z〉。April 2, 2019 –透過GitHub。
- ↑ 〈對 Google V8 的 PPC 支持成為主流〉。2015-06-30。
- ↑ "Introduction - Chrome V8". Google Inc.
- ↑ "V8 Changelog v3.8.2". 原著喺2012-10-22歸檔. 喺2012-10-23搵到.
- ↑ 〈使用 V8、Rust 和 Tokio:denoland/deno〉。2019-07-08 –透過GitHub。
- ↑ "Overview - NativeScript Docs". docs。 nativescript.org. 原著喺2020年7月28號歸檔. 喺2022年4月14號搵到.
- ↑ Jolie O'Dell (2011-03-10)。〈為什麼每個人都在談論Node〉。Mashable。
- ↑ 〈qt qml和qt quick嘅區別〉。Stack Overflow。喺2020-09-26搵到。
- ↑ Verwaest, Toon (2019-03-25)。〈極速解析,第 1 部分:優化掃描儀 · V8〉。v8.dev。原先內容歸檔喺2021年4月21號。喺1 June 2021搵到。
- ↑ Hinkelmann, Franziska (2017-12-19)。〈理解 V8 的字節碼〉。Medium (英文)。喺2019-10-17搵到。
- ↑ 〈啟動 Ignition 解釋器 · V8〉。v8.dev。喺2020-09-30搵到。
- ↑ 〈交互式性能的遊戲改變者〉。blog.chromium.org。2011-11-21。喺2022-02-06搵到。
睇埋
編輯出面網頁
編輯- 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.jsWayback Machine嘅版面存檔備份[1]Wayback Machine嘅版面存檔備份 is a toolkit for writing performant non-blocking event-driven network servers in JavaScript.
- Inside V8 - A Javascript Virtual Machine