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