V8 es un motor de JavaScript y WebAssembly desarrollado por Google para su navegador Chrome . [1] [4] V8 es un software gratuito y de código abierto que forma parte del proyecto Chromium y también se utiliza por separado en contextos que no son de navegador , en particular el sistema de ejecución Node.js. [1]
Google creó V8 para su navegador Chrome , y ambos se lanzaron por primera vez en 2008. [4] El desarrollador principal de V8 fue Lars Bak , y recibió su nombre en honor al potente motor del automóvil . [5] Durante varios años, Chrome fue más rápido que otros navegadores en la ejecución de JavaScript . [6] [7] [8]
El ensamblador V8 se basa en el ensamblador Strongtalk . [9] El 7 de diciembre de 2010, se lanzó una nueva infraestructura de compilación llamada Crankshaft, con mejoras de velocidad. [10] En la versión 41 de Chrome en 2015, se agregó el proyecto TurboFan para proporcionar más mejoras de rendimiento con cargas de trabajo que antes eran desafiantes , como asm.js. [11] Gran parte del desarrollo de V8 está fuertemente inspirado en la máquina virtual Java HotSpot desarrollada por Sun Microsystems , y las canalizaciones de ejecución más nuevas son muy similares a las de HotSpot.
El soporte para el nuevo lenguaje WebAssembly comenzó en 2015. [12]
En 2016, se agregó el intérprete Ignition a V8 con el objetivo de diseño de reducir el uso de memoria en teléfonos Android con poca memoria en comparación con TurboFan y Crankshaft. [13] Ignition es una máquina basada en registros y comparte un diseño similar (aunque no exactamente el mismo) con el intérprete de plantillas utilizado por HotSpot.
En 2017, V8 lanzó una nueva línea de compilación , compuesta por Ignition (el intérprete ) y TurboFan (el compilador optimizador ). A partir de la versión 5.9 de V8, Full-codegen (el compilador de referencia inicial) y Crankshaft ya no se utilizan en V8 para la ejecución de JavaScript, ya que el equipo creía que ya no podían seguir el ritmo de las nuevas características del lenguaje JavaScript y las optimizaciones que esas características requerían. [14]
En 2021, se introdujo un nuevo proceso de compilación por niveles con el lanzamiento del compilador SparkPlug, que complementa al compilador TurboFan existente dentro de V8, en un paralelo directo al compilador C1 de creación de perfiles utilizado por HotSpot.
En 2023, se agregó el compilador basado en Maglev SSA , que es 10 veces más lento que Sparkplug pero 10 veces más rápido que TurboFan, cerrando la brecha entre Sparkplug y TurboFan para bucles que se ejecutan con menos frecuencia y que no se "calientan" lo suficiente como para ser optimizados por TurboFan, como es el caso de la mayoría de las aplicaciones web que pasan más tiempo interactuando con el navegador que en la ejecución de JavaScript. [15]
V8 primero genera un árbol de sintaxis abstracta con su propio analizador. [16] Luego, Ignition genera bytecode a partir de este árbol de sintaxis utilizando el formato de bytecode interno de V8. [17] TurboFan compila este bytecode en código de máquina. En otras palabras, V8 compila ECMAScript directamente en código de máquina nativo utilizando la compilación just-in-time antes de ejecutarlo. [18] El código compilado se optimiza adicionalmente (y se vuelve a optimizar) dinámicamente en tiempo de ejecución, en función de la heurística del perfil de ejecución del código. Las técnicas de optimización utilizadas incluyen inlining , elisión de propiedades costosas en tiempo de ejecución y inline caching . El recolector de elementos no utilizados es un recolector incremental generacional . [19]
V8 se puede compilar en arquitecturas de conjuntos de instrucciones x86 , ARM o MIPS tanto en sus ediciones de 32 bits como de 64 bits ; además, se ha adaptado a PowerPC , [20] [21] y a IBM ESA/390 y z/Architecture , [22] [20] para su uso en servidores. [23]
V8 se puede utilizar en un navegador o integrarse en proyectos independientes. V8 se utiliza en el siguiente software: