| Tämän artikkelin tai sen osan paikkansapitävyys onkyseenalaistettu. Voit auttaa varmistamaan, että kyseenalaistetut väittämät ovatluotettavasti lähteistettyjä. Lisää tietoa saattaa ollakeskustelusivulla. Tarkennus:Vanhentunut, epätarkkoja kohtia ja mahdollisesti virheellisiä väitteitä. Ja mistä lähtien JavaScriptiä suoritettaessa käytetään assembleria? Ainakaan artikkelinassembler kuvaamaa sellaista? |
V8 onavoimen lähdekoodinJavaScript- jaWebAssembly-moottori. Sitä kehitetään osanaChromium-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ösasiakas-palvelin-arkkitehtuurin palvelinpäässä, esimerkiksiCouchbase-,MongoDB- jaNode.js-ympäristöissä.
V8 kääntää JavaScriptiäkonekielelle. Senassembler perustuuStrongtalk-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 omallaparserillaansyntaksipuun. Sen jälkeen Ignition-tulkki generoi syntaksipuustavälikielisentavukoodin käyttäen V8:n sisäistä tavukoodiformaattia.[10] TurboFan on V8:n optimoiva kääntäjä, joka tuottaa tavukoodistakonekieltä. 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öönPowerPC- jaIBM System/390 -pohjaisille palvelimille.[12][13][14]
