V8 (JavaScript-moottori)
Tämän artikkelin tai sen osan paikkansapitävyys on kyseenalaistettu. Voit auttaa varmistamaan, että kyseenalaistetut väittämät ovat luotettavasti lähteistettyjä. Lisää tietoa saattaa olla keskustelusivulla. Tarkennus: Vanhentunut, epätarkkoja kohtia ja mahdollisesti virheellisiä väitteitä. Ja mistä lähtien JavaScriptiä suoritettaessa käytetään assembleria? Ainakaan artikkelin assembler kuvaamaa sellaista? |
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ä.
Historia
[muokkaa | muokkaa wikitekstiä]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]
Ominaisuudet
[muokkaa | muokkaa wikitekstiä]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]
- Koodin kutsukohtia korvataan suoritettavalla koodilla makrojen tapaan (inlining).
- Objektien tarpeetonta kopiointia vältetään (copy elision).
- Nopeutetaan metodien sitomista ajoaikaisiin sisältöihin varastoimalla aikaisempia kutsuja välimuistiin (inline caching).
- Muistinhallintaan liittyvä roskienkeruu suoritetaan vaiheittain siten, että ohjelman suoritus jatkuu roskienkeruujaksojen välillä.
Käyttö
[muokkaa | muokkaa wikitekstiä]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]
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ McCloud, Scott: Google on Google Chrome – Comic Book Blogoscoped. 2008. Google. Viitattu 24.8.2020. (englanniksi)
- ↑ Minto, Rob: The Genius Behind Google’s Web Browser. (Maksullinen artikkeli) Financial Times, 17.3.2009. Lontoo. Artikkelin verkkoversio. Viitattu 24.8.2020. (englanniksi)
- ↑ V8 JavaScript Engine: License Google Code. Google. Arkistoitu 22.7.2010. Viitattu 24.8.2020. (englanniksi)
- ↑ 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. (englanniksi)
- ↑ Revving up JavaScript performance with TurboFan Chromium Blog. 7.7.2015. Google. Viitattu 24.8.2020. (englanniksi)
- ↑ McIlroy, Ross: BlinkOn 6 Day 1 Talk 2: Ignition – an Interpreter for V8 YouTubessa. Viitattu 24.8.2020. (englanniksi)
- ↑ Launching Ignition and TurboFan V8 Dev Blog Post Archive. 16.5.2017. Viitattu 24.8.2020. (englanniksi)
- ↑ The V8 Sandbox v8.dev. 4.4.2024. Viitattu 5.4.2024. (englanniksi)
- ↑ Hinkelmann, Franziska: Understanding V8’s Bytecode Medium. 19.12.2017. Viitattu 24.8.2020. (englanniksi)
- ↑ A Game Changer for Interactive Performance Chromium Blog. 21.11.2011. Google. Viitattu 24.8.2020. (englanniksi)
- ↑ V8 JavaScript Engine Git Repositories on Chromium. Google Git. Viitattu 24.8.2020. (englanniksi)
- ↑ What Is V8? V8 Dev Blog. Viitattu 24.8.2020. (englanniksi)
- ↑ ChangeLog V8 Google Code. 2012. Arkistoitu 22.10.2012. Viitattu 24.8.2020. (englanniksi)