V8 (JavaScript engine)

Last updated

V8
Developer(s) Google [1]
Initial release2 September 2008;15 years ago (2008-09-02)
Stable release
11.4 [2]   OOjs UI icon edit-ltr-progressive.svg / 24 May 2023;10 months ago (24 May 2023)
Repository
Written in C++ [1]
Platform IA-32, x86-64, 32-bit ARM, AArch64, 32-bit MIPS, MIPS64, PowerPC, IBM ESA/390, z/Architecture
Type JavaScript and WebAssembly engine
License BSD [3]
Website v8.dev   OOjs UI icon edit-ltr-progressive.svg

V8 is a JavaScript and WebAssembly engine developed by Google for its Chrome browser. [1] [4] V8 is free and open-source software that is part of the Chromium project and also used separately in non-browser contexts, notably the Node.js runtime system. [1]

Contents

History

Google created V8 for its Chrome browser, and both were first released in 2008. [4] The lead developer of V8 was Lars Bak, and it was named for the powerful car engine. [5] For several years, Chrome was faster than other browsers at executing JavaScript. [6] [7] [8]

The V8 assembler is based on the Strongtalk assembler. [9] On 7 December 2010, a new compiling infrastructure named Crankshaft was released, with speed improvements. [10] In version 41 of Chrome in 2015, project TurboFan was added to provide more performance improvements with previously challenging workloads such as asm.js. [11] 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.

Support for the new WebAssembly language began in 2015. [12]

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. [13] 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. [14]

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. [15]

Design

V8 first generates an abstract syntax tree with its own parser. [16] Then, Ignition generates bytecode from this syntax tree using the internal V8 bytecode format. [17] 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. [18] 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. [19]

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, [20] [21] and to IBM ESA/390 and z/Architecture, [22] [20] for use in servers. [23]

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

See also

Related Research Articles

<span class="mw-page-title-main">Java virtual machine</span> Virtual machine that runs Java programs

A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

<span class="mw-page-title-main">Interpreter (computing)</span> Program that executes source code without a separate compilation step

In computer science, an interpreter is a computer program that directly executes instructions written in a programming or scripting language, without requiring them previously to have been compiled into a machine language program. An interpreter generally uses one of the following strategies for program execution:

  1. Parse the source code and perform its behavior directly;
  2. Translate source code into some efficient intermediate representation or object code and immediately execute that;
  3. Explicitly execute stored precompiled bytecode made by a compiler and matched with the interpreter's Virtual Machine.

Bytecode is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references that encode the result of compiler parsing and performing semantic analysis of things like type, scope, and nesting depths of program objects.

<span class="mw-page-title-main">SpiderMonkey</span> JavaScript and WebAssembly engine maintained by the Mozilla Foundation

SpiderMonkey is an open-source JavaScript and WebAssembly engine by the Mozilla Foundation.

In computing, just-in-time (JIT) compilation is compilation during execution of a program rather than before execution. This may consist of source code translation but is more commonly bytecode translation to machine code, which is then executed directly. A system implementing a JIT compiler typically continuously analyses the code being executed and identifies parts of the code where the speedup gained from compilation or recompilation would outweigh the overhead of compiling that code.

WebKit is a browser engine developed by Apple and primarily used in its Safari web browser, as well as all web browsers on iOS and iPadOS. WebKit is also used by the PlayStation consoles starting with the PS3, the Tizen mobile operating systems, the Amazon Kindle e-book reader, Nintendo consoles starting with the 3DS Internet Browser, and the discontinued BlackBerry Browser. WebKit's C++ application programming interface (API) provides a set of classes to display Web content in windows, and implements browser features such as following links when clicked by the user, managing a back-forward list, and managing a history of pages recently visited.

A JavaScript engine is a software component that executes JavaScript code. The first JavaScript engines were mere interpreters, but all relevant modern engines use just-in-time compilation for improved performance.

In computer programming, a programming language implementation is a system for executing computer programs. There are two general approaches to programming language implementation:

In computer science, ahead-of-time compilation is the act of compiling an (often) higher-level programming language into an (often) lower-level language before execution of a program, usually at build-time, to reduce the amount of work needed to be performed at run time.

Dalvik is a discontinued process virtual machine (VM) in the Android operating system that executes applications written for Android. Dalvik was an integral part of the Android software stack in the Android versions 4.4 "KitKat" and earlier, which were commonly used on mobile devices such as mobile phones and tablet computers, and more in some devices such as smart TVs and wearables. Dalvik is open-source software, originally written by Dan Bornstein, who named it after the fishing village of Dalvík in Eyjafjörður, Iceland.

Google Native Client (NaCl) is a discontinued sandboxing technology for running either a subset of Intel x86, ARM, or MIPS native code, or a portable executable, in a sandbox. It allows safely running native code from a web browser, independent of the user operating system, allowing web apps to run at near-native speeds, which aligns with Google's plans for ChromeOS. It may also be used for securing browser plugins, and parts of other applications or full applications such as ZeroVM.

<span class="mw-page-title-main">Chromium (web browser)</span> Open-source web browser project

Chromium is a free and open-source web browser project, primarily developed and maintained by Google. It is a widely-used codebase, providing the vast majority of code for Google Chrome and many other browsers, including Microsoft Edge, Samsung Internet, and Opera. The code is also used by several app frameworks.

<span class="mw-page-title-main">Node.js</span> JavaScript runtime environment

Node.js is a cross-platform, open-source JavaScript runtime environment that can run on Windows, Linux, Unix, macOS, and more. Node.js runs on the V8 JavaScript engine, and executes JavaScript code outside a web browser.

Dart is a programming language designed by Lars Bak and Kasper Lund and developed by Google. It can be used to develop web and mobile apps as well as server and desktop applications.

Emscripten is an LLVM/Clang-based compiler that compiles C and C++ source code to WebAssembly, primarily for execution in web browsers.

asm.js is a subset of JavaScript designed to allow computer software written in languages such as C to be run as web applications while maintaining performance characteristics considerably better than standard JavaScript, which is the typical language used for such applications.

<span class="mw-page-title-main">GraalVM</span> Virtual machine software

GraalVM is a Java Development Kit (JDK) written in Java. The open-source distribution of GraalVM is based on OpenJDK, and the enterprise distribution is based on Oracle JDK. As well as just-in-time (JIT) compilation, GraalVM can compile a Java application ahead of time. This allows for faster initialization, greater runtime performance, and decreased resource consumption, but the resulting executable can only run on the platform it was compiled for. It provides additional programming languages and execution modes. The first production-ready release, GraalVM 19.0, was distributed in May 2019. The most recent release is GraalVM for JDK 22, made available in March 2024.

<span class="mw-page-title-main">WebAssembly</span> Cross-platform assembly language and bytecode designed for execution in web browsers

WebAssembly defines a portable binary-code format and a corresponding text format for executable programs as well as software interfaces for facilitating interactions between such programs and their host environment.

<span class="mw-page-title-main">Deno (software)</span> Secure JavaScript and TypeScript runtime

Deno is a runtime for JavaScript, TypeScript, and WebAssembly that is based on the V8 JavaScript engine and the Rust programming language. Deno was co-created by Ryan Dahl, who also created Node.js.

References

  1. 1 2 3 4 "Documentation · V8". Google. Retrieved 3 March 2024.
  2. "Chrome Platform Status" . Retrieved 29 June 2023.
  3. "v8/LICENSE.v8 at master". Github.
  4. 1 2 Lenssen, Philipp (1 September 2008). "Google on Google Chrome - comic book". Google Blogoscoped. Retrieved 17 August 2010.
  5. "V8: an open source JavaScript engine". YouTube. Google. Retrieved 15 March 2024.
  6. "Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome". PC Games Hardware. Computec Media AG. 3 July 2009. Archived from the original on 2 May 2012. Retrieved 28 June 2010.
  7. Purdy, Kevin (11 June 2009). "Lifehacker Speed Tests: Safari 4, Chrome 2". Lifehacker . Archived from the original on 14 April 2021. Retrieved 8 May 2021.
  8. "Mozilla asks, 'Are we fast yet?'". Wired. Archived from the original on 22 June 2018. Retrieved 18 January 2019.
  9. "V8 JavaScript Engine: License". Google Code . Archived from the original on 22 July 2010. Retrieved 17 August 2010.
  10. "A New Crankshaft for V8". Chromium Blog. 7 December 2010. Retrieved 22 April 2011.
  11. "Revving up JavaScript performance with TurboFan". 7 July 2015. Retrieved 5 March 2016.
  12. "Experimental support for WebAssembly in V8". v8.dev. Retrieved 12 March 2024.
  13. "BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8". YouTube . 26 June 2016. Archived from the original on 21 December 2021. Retrieved 2 September 2016.
  14. "Launching Ignition and TurboFan". 16 May 2017. Retrieved 13 July 2017.
  15. "Maglev - V8's Fastest Optimizing JIT". 5 December 2023. Retrieved 26 January 2024.
  16. Verwaest, Toon (25 March 2019). "Blazingly fast parsing, part 1: optimizing the scanner · V8". v8.dev. Archived from the original on 21 April 2021. Retrieved 1 June 2021.
  17. Hinkelmann, Franziska (19 December 2017). "Understanding V8's Bytecode". Medium. Retrieved 17 October 2019.
  18. "Firing up the Ignition interpreter · V8". v8.dev. Retrieved 30 September 2020.
  19. "A game changer for interactive performance". blog.chromium.org. 21 November 2011. Retrieved 6 February 2022.
  20. 1 2 "PPC support for Google V8 goes mainstream". 30 June 2015. Archived from the original on 12 September 2015.
  21. "GitHub - ibmruntimes/v8ppc: Port of Google V8 javascript engine to PowerPC®". 21 April 2019 via GitHub.
  22. "Port of Google V8 JavaScript engine to z/OS. The Linux on Z port is maintained in the community: ibmruntimes/v8z". 2 April 2019 via GitHub.
  23. "V8 Changelog v3.8.2". Archived from the original on 22 October 2012. Retrieved 23 October 2012.
  24. "A secure JavaScript/TypeScript runtime built with V8, Rust, and Tokio: denoland/deno". 8 July 2019 via GitHub.
  25. "Overview - NativeScript Docs". docs.nativescript.org.
  26. Jolie O'Dell (10 March 2011). "Why Everyone Is Talking About Node". Mashable.
  27. "Difference between qt qml and qt quick". Stack Overflow. Retrieved 26 September 2020.