V8 (JavaScript-moottori)
V8 on avoimeen lähdekoodiin perustuva JavaScript-moottori. Se kehitettiin osana Chromium -projektia, josta syntyi Google Chrome.[1] Projektin perustaja oli Lars Bak.[2] V8-moottorin ensimmäinen versio julkistettiin yhdessä Chrome-selaimen ensimmäisen version kanssa 2. syyskuuta 2008. V8-moottoria käytetään myös asiakas-palvelin-arkkitehtuurin palvelinpäässä, esimerkiksi Couchbase-, MongoDB- ja Node.js-ympäristöissä.
Historiaa
V8 kääntää JavaScriptiä konekielelle. Sen assembler perustuu Strongtalk-assembleriin.[3] V8 on kirjoitettu C++-kielellä.[4]Alkuperäisen kääntäjän nimi oli Full-codegen. Uusi, Crankshaft-niminen käännösympäristö julkistettiin 7.12.2010. Julkistuksen myötä käännösnopeus parani.[5] Chromen versiosta 41 lähtien (2015) kokonaisuuteen kuuluu TurboFan-projekti, jonka tarkoituksena on lisätä nopeutta edelleen.[6] Vuonna 2016 V8-moottoriin lisättiin Ignition-tulkki, jonka tarkoitus on vähentää käytetyn muistin määrää pienimuistisissa Android-puhelimissa verrattuna TurboFan- ja Crankshaft-kääntäjiin.[7] Vuonna 2017 moottorin kääntäjäkokonaisuus uudistettiin siten, että siihen kuuluu Ignition-tulkki ja optimoiva kääntäjä TurboFan. Versiosta 5.9 lähtien Full-codegen ja Crankshaft eivät enää kuulu V8:aan, koska tiimi uskoo, etteivät ne enää pysy JavaScriptin uusien piirteiden kehityksessä mukana. [8]
Ominaisuudet
V8 tuottaa koodista ensin omalla parserillaan syntaksipuun. Sen jälkeen Ignition-tulkki generoi syntaksipuusta välikielisen tavukoodin (bytecode) käyttäen V8:n sisäistä tavukoodiformaattia.[9] TurboFan on V8:n optimoiva kääntäjä, joka tuottaa tavukoodista konekieltä. Toisin sanoen V8 kääntää JavaScriptiä konekieliseksi koodiksi juuri ennen ohjelman suoritusta (just-in-time compilation). Käännettyä koodia optimoidaan ja uudelleenoptimoidaan ajoaikaisesti koodin suoritusprofiloinnin pohjalta.
Seuraavia optimointitekniikoita käytetään: 1) Koodin kutsukohtia korvataan suoritettavalla koodilla makrojen tapaan (inlining). 2) Objektien tarpeetonta kopiointia vältetään (copy elision). 3) Nopeutetaan metodien sitomista ajoaikaisiin sisältöihin varastoimalla aikaisempia kutsuja välimuistiin (inline caching). 4) Muistinhallintaan liittyvä roskienkeruu suoritetaan vaiheittain siten, että ohjelman suoritus jatkuu roskienkeruujaksojen välillä.[10]
Käyttö
V8 voi kääntää x86-, ARM- ja MIPS-arkkitehtuurien konekielelle niiden 32- ja 64-bittisissä versioissa. Se on sovitettu myös palvelinkäyttöön PowerPC- ja IBM System/390–pohjaisille palvelimille. [11][12][13]
Lähteet
- ↑ McCloud Scott: Google on Google Chrome - comic book 2008. Google Inc.. Viitattu 24.8.2020.
- ↑ Minto, Rob: The genius behind Google's web browser. ((vain Financial Timesin tilaajille)) Financial Times, 17.3.2009. Artikkelin verkkoversio. Viitattu 24.8.2020. (englanniksi)
- ↑ V8 JavaScript Engine: License Google Code [arkistoitu 22.7.2010]. Google. Viitattu 24.8.2020.
- ↑ Pasquali,Sandro: Mastering Node.js, s. 15. Birmingham, Mumbai: PACKT Publishing, 2013. ISBN 978-1-78216-632-0 (englanniksi)
- ↑ A New Crankshaft for V8 Chromium Blog. 7.12.2010. Google. Viitattu 24.8.2020.
- ↑ Revving up JavaScript performance with TurboFan Chromium Blog. 7.7.2015. Google. Viitattu 24.8.2020.
- ↑ BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8 BlinkOn (Youtube-kanava). 26.6.2016. McIlroy, Ross. Viitattu 24.8.2020.
- ↑ Launching Ignition and TurboFan v8.dev:Blog post archive. 16.5.2017. Viitattu 24.8.2020.
- ↑ Hinkelmann, Franziska: Understanding V8's Bytecode Medium. 19.12.2017. Viitattu 24.8.2020.
- ↑ A game changer for interactive performance Chromium Blog. 21.11.2011. Google. Viitattu 24.8.2020.
- ↑ Google Developers: V8 JavaScript Engine Git repositories on chromium. Google Git. Viitattu 24.8.2020.
- ↑ Google Developers: What is V8? v8.dev/blog. Viitattu 24.8.2020.
- ↑ ChangeLog web.archive.org. Viitattu 24.8.2020.