Software:V8 (JavaScript engine)

From HandWiki
Short description: Open-source JavaScript and WebAssembly engine developed by Google
V8
V8 JavaScript engine logo 2.svg
Original author(s)Lars Bak of Google
Developer(s)The Chromium Project
Initial release2 September 2008; 15 years ago (2008-09-02)
Written inC++[1]
PlatformIA-32, x86-64, ARM, AArch64, MIPS, MIPS64[2] PowerPC, IBM ESA/390
TypeJavaScript and WebAssembly engine
LicenseBSD[3]

V8 is a free and open-source JavaScript and WebAssembly engine developed by the Chromium Project for Chromium and Google Chrome web browsers.[4] The project's creator is Lars Bak.[5] The first version of the V8 engine was released at the same time as the first version of Chrome: 2 September 2008. It has also been used on the server side, for example in Couchbase, Deno and Node.js.

History

The V8 assembler is based on the Strongtalk assembler.[6] On 7 December 2010, a new compiling infrastructure named Crankshaft was released, with speed improvements.[7] In version 41 of Chrome in 2015, project TurboFan was added to provide more performance improvements with previously challenging workloads such as asm.js.[8] Much of V8's development is strongly inspired by the Java HotSpot Virtual Machine developed by Sun Microsystems, with the newer execution pipelines being very similar to those of HotSpot's.

In 2016, the Ignition interpreter was added to V8 with the design goal of reducing the memory usage on small memory Android phones in comparison with TurboFan and Crankshaft.[9] Ignition is a register based machine and shares a similar (albeit not the exact same) design to the templating interpreter utilized by HotSpot.

In 2017, V8 shipped a brand-new compiler pipeline, consisting of Ignition (the interpreter) and TurboFan (the optimizing compiler). Starting with V8 version 5.9, Full-codegen (the early baseline compiler) and Crankshaft are no longer used in V8 for JavaScript execution, since the team believed they were no longer able to keep pace with new JavaScript language features and the optimizations those features required.[10]

In 2021, a new tiered compilation pipeline was introduced with the release of the SparkPlug compiler, which supplements the existing TurboFan compiler within V8, in a direct parallel to the profiling C1 Compiler used by HotSpot.

In 2023, the Maglev SSA-based compiler was added, which is 10 times slower than Sparkplug but 10 times faster than TurboFan, bridging the gap between Sparkplug and TurboFan for less frequently run loops that do not get "hot" enough to be optimised by TurboFan, as is the case for most web applications that spend more time interacting with the browser than in JavaScript execution. [11]

Design

V8 first generates an abstract syntax tree with its own parser.[12] Then, Ignition generates bytecode from this syntax tree using the internal V8 bytecode format.[13] TurboFan compiles this bytecode into machine code. In other words, V8 compiles ECMAScript directly to native machine code using just-in-time compilation before executing it.[14] The compiled code is additionally optimized (and re-optimized) dynamically at runtime, based on heuristics of the code's execution profile. Optimization techniques used include inlining, elision of expensive runtime properties, and inline caching. The garbage collector is a generational incremental collector.[15]

Usage

V8 can compile to x86, ARM or MIPS instruction set architectures in both their 32-bit and 64-bit editions; it has additionally been ported to PowerPC[16] and IBM ESA/390[17][18] for use in servers.[2][19]

V8 can be used in a browser or integrated into independent projects. V8 is used in the following software:

See also

  • Blink, the Chromium browser engine

References

  1. "V8 JavaScript Engine". Google LLC. https://v8.dev/. 
  2. 2.0 2.1 "Introduction - Chrome V8". Google Inc.. https://developers.google.com/v8/intro. 
  3. "v8/LICENSE.v8 at master". Github. https://github.com/v8/v8/blob/master/LICENSE.v8. 
  4. Lenssen, Philipp (1 September 2008). "Google on Google Chrome - comic book". Google Blogoscoped. http://blogoscoped.com/google-chrome/. 
  5. Minto, Rob (27 March 2009). "The genius behind Google's web browser". Financial Times. http://www.ft.com/cms/s/2/03775904-177c-11de-8c9d-0000779fd2ac.html. (Subscription content?)
  6. "V8 JavaScript Engine: License". Google Code. https://code.google.com/p/v8/source/browse/trunk/LICENSE. 
  7. "A New Crankshaft for V8". Chromium Blog. 7 December 2010. https://blog.chromium.org/2010/12/new-crankshaft-for-v8.html. 
  8. "Revving up JavaScript performance with TurboFan". 7 July 2015. https://blog.chromium.org/2015/07/revving-up-javascript-performance-with.html. 
  9. "BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8". 26 June 2016. https://www.youtube.com/watch?v=r5OWCtuKiAk. 
  10. "Launching Ignition and TurboFan". 16 May 2017. https://v8project.blogspot.com/2017/05/launching-ignition-and-turbofan.html. 
  11. "Maglev - V8’s Fastest Optimizing JIT". 5 December 2023. https://v8.dev/blog/maglev. 
  12. Verwaest, Toon (25 March 2019). "Blazingly fast parsing, part 1: optimizing the scanner · V8". https://v8.dev/blog/scanner. 
  13. Hinkelmann, Franziska (2017-12-19). "Understanding V8's Bytecode" (in en). https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775. 
  14. "Firing up the Ignition interpreter · V8". https://v8.dev/blog/ignition-interpreter. 
  15. "A game changer for interactive performance". 2011-11-21. https://blog.chromium.org/2011/11/game-changer-for-interactive.html. 
  16. "GitHub - ibmruntimes/v8ppc: Port of Google V8 javascript engine to PowerPC®.". April 21, 2019. https://github.com/ibmruntimes/v8ppc. 
  17. "Port of Google V8 JavaScript engine to z/OS. The Linux on Z port is maintained in the community: ibmruntimes/v8z". April 2, 2019. https://github.com/ibmruntimes/v8z. 
  18. "PPC support for Google V8 goes mainstream". June 30, 2015. https://developer.ibm.com/opentech/2015/06/30/ppc-support-for-google-v8-goes-mainstream/. 
  19. "V8 Changelog v3.8.2". http://v8.googlecode.com/svn/trunk/ChangeLog. 
  20. "A secure JavaScript/TypeScript runtime built with V8, Rust, and Tokio: denoland/deno". July 8, 2019. https://github.com/denoland/deno. 
  21. "Overview - NativeScript Docs". https://docs.nativescript.org/core-concepts/android-runtime/overview. 
  22. Jolie O'Dell (March 10, 2011). "Why Everyone Is Talking About Node". Mashable. http://mashable.com/2011/03/10/node-js/. 
  23. "Difference between qt qml and qt quick". https://stackoverflow.com/a/19837895/7910299. 

External links