V8 (JavaScript-moottori)

Wikipediasta
Siirry navigaatioon Siirry hakuun

V8 on avoimen lähdekoodin JavaScript- ja WebAssembly-moottori. Sitä kehitettään osana Chromium-projektia.[1] Projektin perustaja oli Lars Bak.[2] V8-moottorin ensimmäinen versio julkaistiin yhdessä Google Chromen 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ä.

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ö julkaistiin 7. joulukuuta 2010. Julkistuksen myötä käännösnopeus parani.[5] Google 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] Huhtikuussa 2024 V8:n kehittäjät ilmoittivat, että uusi hiekkalaatikko on edistynyt eikä ole enää kokeellinen ominaisuus.[9]

V8 tuottaa koodista ensin omalla parserillaan syntaksipuun. Sen jälkeen Ignition-tulkki generoi syntaksipuusta välikielisen tavukoodin käyttäen V8:n sisäistä tavukoodiformaattia.[10] 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:[11]

  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ä.

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

  1. McCloud, Scott: Google on Google Chrome – Comic Book Blogoscoped. 2008. Google. Viitattu 24.8.2020. (englanniksi)
  2. Minto, Rob: The Genius Behind Google’s Web Browser. (Maksullinen artikkeli) Financial Times, 17.3.2009. Lontoo. Artikkelin verkkoversio. Viitattu 24.8.2020. (englanniksi)
  3. V8 JavaScript Engine: License Google Code. Google. Arkistoitu 22.7.2010. Viitattu 24.8.2020. (englanniksi)
  4. Pasquali, Sandro: Mastering Node.js, s. 15. Birmingham, Mumbai: PACKT Publishing, 2013. ISBN 978-1-78216-632-0 (englanniksi)
  5. A New Crankshaft for V8 Chromium Blog. 7.12.2010. Google. Viitattu 24.8.2020. (englanniksi)
  6. Revving up JavaScript performance with TurboFan Chromium Blog. 7.7.2015. Google. Viitattu 24.8.2020. (englanniksi)
  7. McIlroy, Ross: BlinkOn 6 Day 1 Talk 2: Ignition – an Interpreter for V8 YouTubessa. Viitattu 24.8.2020. (englanniksi)
  8. Launching Ignition and TurboFan V8 Dev Blog Post Archive. 16.5.2017. Viitattu 24.8.2020. (englanniksi)
  9. The V8 Sandbox v8.dev. 4.4.2024. Viitattu 5.4.2024. (englanniksi)
  10. Hinkelmann, Franziska: Understanding V8’s Bytecode Medium. 19.12.2017. Viitattu 24.8.2020. (englanniksi)
  11. A Game Changer for Interactive Performance Chromium Blog. 21.11.2011. Google. Viitattu 24.8.2020. (englanniksi)
  12. V8 JavaScript Engine Git Repositories on Chromium. Google Git. Viitattu 24.8.2020. (englanniksi)
  13. What Is V8? V8 Dev Blog. Viitattu 24.8.2020. (englanniksi)
  14. ChangeLog V8 Google Code. 2012. Arkistoitu 22.10.2012. Viitattu 24.8.2020. (englanniksi)
Käännös suomeksi
Käännös suomeksi
Tämä artikkeli tai sen osa on käännetty tai siihen on haettu tietoja muunkielisen Wikipedian artikkelista.
Alkuperäinen artikkeli: en:V8 (JavaScript engine)