V8 (JavaScript -Engine)
![]() | |
Originalautor (en) | Lars Bak von Google |
---|---|
Entwickler (en) | Das Chrom -Projekt |
Erstveröffentlichung | 2. September 2008 |
Stabile Version | 9.9[1] ![]() |
Repository | |
Geschrieben in | C ++[2] |
Plattform | IA-32, x86-64, ARM, Aarch64, MIPS, MIPS64[3] Powerpc, IBM S390 |
Typ | JavaScript -Engine |
Lizenz | BSD[4] |
Webseite | V8![]() |
V8 ist ein frei und offen JavaScript -Engine entwickelt vom Chrom -Projekt für Google Chrome und Chrom Internetbrowser.[5] Der Schöpfer des Projekts ist Lars Bak.[6] Die erste Version der V8 -Engine wurde gleichzeitig mit der ersten Version von Chrome veröffentlicht: 2. September 2008. Sie wurde auch auf der Serverseite verwendet, zum Beispiel in Couchbase und Node.js.
Geschichte
Der v8 Assembler basiert auf dem StrongTalk Assembler.[7] Am 7. Dezember 2010 wurde eine neue Kompilieninfrastruktur namens Kurbelwelle mit Geschwindigkeitsverbesserungen veröffentlicht.[8] In Version 41 von Chrome im Jahr 2015 wurde Project Turbofan hinzugefügt, um mehr Leistungsverbesserungen mit bisher herausfordernden Workloads wie z. ASM.JS.[9] Ein Großteil der Entwicklung von V8 ist stark von der inspiriert Java Hotspot Virtual Machine entwickelt von Sun MicrosystemsDa die neueren Ausführungspipelines denen von Hotspots sehr ähnlich sind.
Im Jahr 2016 wurde der Zünddolmetscher zu V8 hinzugefügt, wobei das Entwurfsziel der Verringerung der Speicherverwendung bei kleinem Speicher reduziert wurde Android Telefone im Vergleich zu Turbofan und Kurbelwelle.[10] Die Zündung ist eine registrierende Maschine und teilt ein ähnliches (wenn auch nicht genau gleiches) Design dem von Hotspot verwendeten Templating -Interpreter.
Im Jahr 2017 versendete V8 eine brandneue Compiler-Pipeline, bestehend aus Zündung (die Dolmetscher) und Turbofan (die Compiler optimieren). Beginnend mit V8 Version 5.9, Full-CodeGen (der frühe Basis-Compiler) und Kurbelwelle werden in V8 nicht mehr für die Ausführung von JavaScript verwendet, da das Team der Ansicht ist .[11]
Im Jahr 2021 wurde mit der Freisetzung des Sparkplug -Compilers, der den vorhandenen Turbofan -Compiler innerhalb von V8 ergänzt, in direktem Parallel zum Profiling C1 -Compiler, der von Hotspot verwendet wird.
Entwurf
V8 erzeugt zuerst eine Zusammenfassung Syntaxbaum mit seinem eigenen Parser.[12] Dann erzeugt die Zündung Bytecode Aus diesem Syntaxbaum mit dem internen V8 -Bytecode -Format.[13] Turbofan kompiliert diesen Bytecode in den Maschinencode. Mit anderen Worten, V8 kompiliert ECMaskript direkt an einheimische Maschinensprache Verwendung Just-in-Time-Zusammenstellung Vor der Ausführung.[14] Der kompilierte Code ist zusätzlich zur Laufzeit dynamisch optimiert (und wiederoptimiert), basierend auf der Heuristik des Ausführungsprofils des Codes. Zu den verwendeten Optimierungstechniken gehören Einbindung, Elision von teuren Laufzeiteigenschaften und Inline -Caching. Das Müllsammler ist ein Generation inkrementell Kollektor.[15]
Verwendungszweck
V8 kann zusammen kompilieren x86, ARM oder MIPS Anweisungsset Architekturen in beiden ihrer 32-Bit und 64-Bit Ausgaben; Es wurde zusätzlich auf portiert Powerpc[16] und IBM S390[17][18] Für die Verwendung in Servern.[3][19]
V8 kann in einem Browser verwendet oder in unabhängige Projekte integriert werden. V8 wird in der folgenden Software verwendet:
- Chrom-basierend Internetbrowser - Google Chrome, Tapfer, Oper, Vivaldi und Microsoft Edge.
- Couchbase Datenbankserver
- Deno Laufzeitumgebung[20]
- Elektron Desktop -Anwendungsrahmen, verwendet von der Atom und Visual Studio -Code Textredakteure
- Marklogic Datenbankserver
- Einheimischer Mobiles Anwendungsrahmen[21]
- Node.js Laufzeitumgebung[22]
- Qt schnell Laufzeitumgebung[23]
Siehe auch
- Blinkender Chrombrowsermotor
- Vergleich von JavaScript -Motoren
Verweise
- ^ "V8 Release v9.9". 31. Januar 2022. Abgerufen 3. Februar 2022.
- ^ "V8 JavaScript Engine". Google LLC.
- ^ a b "Einführung - Chrome V8". Google Inc.
- ^ "V8/Lizenz.V8 bei Master". Github.
- ^ Lenssen, Philipp (1. September 2008). "Google auf Google Chrome - Comic" ". Google Blogoscoped. Abgerufen 17. August 2010.
- ^ Minto, Rob (27. März 2009). "Das Genie hinter Googles Webbrowser". Finanzzeiten. Archiviert Aus dem Original am 1. Dezember 2011. Abgerufen 1. Juni 2021.(Abonnement erforderlich)
- ^ "V8 JavaScript Engine: Lizenz". Google -Code. Archiviert von das Original am 22. Juli 2010. Abgerufen 17. August 2010.
- ^ "Eine neue Kurbelwelle für V8". Chrom -Blog. 7. Dezember 2010. Abgerufen 22. April 2011.
- ^ "Aufnahme von JavaScript -Leistung mit Turbofan". 7. Juli 2015. Abgerufen 5. März 2016.
- ^ "Blinkon 6 Day 1 Talk 2: Zündung - Ein Dolmetscher für V8". 26. Juni 2016. Archiviert vom Original am 2021-12-21. Abgerufen 2. September 2016.
- ^ "Zündung und Turbofan starten". 16. Mai 2017. Abgerufen 13. Juli 2017.
- ^ Verwaest, Toon (25. März 2019). "Blazend schnell analysiert, Teil 1: Optimierung des Scanners · v8". v8.dev. Archiviert vom Original am 21. April 2021. Abgerufen 1. Juni 2021.
- ^ Hinkelmann, Franziska (2017-12-19). "Bytecode von V8 verstehen". Mittel. Abgerufen 2019-10-17.
- ^ "Zünddolarter · v8 aufgeben". v8.dev. Abgerufen 2020-09-30.
- ^ "Ein Game Changer für interaktive Leistung". blog.chromium.org. 2011-11-21. Abgerufen 2022-02-06.
- ^ "Github - IBMRUNTIMES/V8PPC: Port von Google V8 JavaScript Engine an PowerPC®". 21. April 2019 - über Github.
- ^ "Port von Google V8 JavaScript Engine nach Z/OS. Der Linux auf Z -Port wird in der Community gepflegt: ibmruntimes/v8z". 2. April 2019 - über Github.
- ^ "PPC -Unterstützung für Google V8 geht Mainstream". 30. Juni 2015.
- ^ "V8 ChangeLog v3.8.2". Archiviert von das Original am 22. Oktober 2012. Abgerufen 23. Oktober 2012.
- ^ "Eine sichere Laufzeit von JavaScript/TypeScript mit V8, Rost und Tokio: Denoland/Deno". 8. Juli 2019 - über Github.
- ^ "Übersicht - Nativescript -Dokumente". docs.nativeScript.org.
- ^ Jolie O'Dell (10. März 2011). "Warum alle über Knoten sprechen". Massig.
- ^ "Unterschied zwischen QT QML und QT Quick". Paketüberfluss. Abgerufen 2020-09-26.