O V8 é um mecanismo de JavaScript e WebAssembly de código aberto desenvolvido pela Google para o seu navegador Google Chrome. É um software livre e de código aberto que faz parte do projeto Chromium. Além do uso em navegadores web, o V8 é utilizado em ambientes de execução fora do navegador, destacando-se o Node.js. Outros ambientes de execução JavaScript do lado do servidor utilizam motores alternativos, como o Bun (que utiliza o JavaScriptCore) e o Hermes (utilizado pelo React Native).
História
A Google criou o V8 para o navegador Chrome, de modo que o lançamento inicial do motor coincidiu com o lançamento da primeira versão do Chrome em 2008. O nome é uma referência ao motor V8, e seu desenvolvedor principal foi Lars Bak. Por diversos anos, o Chrome manteve uma velocidade de execução de JavaScript superior à de seus concorrentes.
O assembler do V8 baseia-se no montador da linguagem Strongtalk. Em 7 de dezembro de 2010, foi lançada uma nova infraestrutura de compilação chamada Crankshaft, que trouxe melhorias substanciais de desempenho. Na versão 41 do Chrome, em 2015, o projeto TurboFan foi introduzido para otimizar cargas de trabalho complexas, tais como asm.js. Grande parte do desenvolvimento do V8 foi inspirada pela Java HotSpot Virtual Machine da Sun Microsystems, com os pipelines de execução mais recentes apresentando forte semelhança com os do HotSpot.
O suporte à linguagem WebAssembly foi introduzido em 2015.
Em 2016, o interpretador Ignition foi adicionado ao V8 com o objetivo de reduzir o uso de memória em dispositivos Android com recursos limitados em comparação com o uso do TurboFan e Crankshaft. O Ignition é uma máquina baseada em registradores.
Em 2017, o V8 passou a adotar um novo pipeline de compilação composto pelo Ignition (interpretador) e pelo TurboFan (compilador de otimização). A partir da versão 5.9 do V8, o Full-codegen e o Crankshaft foram descontinuados, pois a equipe de desenvolvimento concluiu que eles não conseguiam mais acompanhar a evolução de novos recursos da linguagem JavaScript.
Em 2021, um novo compilador de linha de base chamado SparkPlug foi adicionado para complementar o TurboFan no fluxo de compilação em camadas.
Em 2023, foi introduzido o compilador Maglev, baseado em SSA, posicionado entre o Sparkplug e o TurboFan para otimizar trechos de código que não atingem a frequência de execução necessária para justificar a compilação mais custosa do TurboFan.
Projeto
O V8 inicia o processamento gerando uma árvore de sintaxe abstrata com um analisador próprio. Em seguida, o Ignition gera bytecode a partir dessa árvore. O TurboFan compila esse bytecode em código de máquina nativo utilizando compilação Just-In-Time (JIT) antes de sua execução. O código compilado é otimizado dinamicamente em tempo de execução com base no perfil de execução. As técnicas de otimização aplicadas incluem substituição em linha, elisão de propriedades caras e cache em linha. O gerencimento de memória utiliza um coletor de lixo incremental e geracional.
Uso
O V8 pode compilar para as arquiteturas de instrução x86, ARM e MIPS, tanto nas edições de 32 bits quanto de 64 bits. Também foi adaptado para PowerPC, IBM ESA/390 e z/Architecture para uso em servidores.
O motor pode ser integrado em navegadores ou em projetos independentes. Ele é empregado nos seguintes softwares:
- Navegadores baseados em Chromium — Google Chrome, Brave, Opera, Vivaldi e Microsoft Edge.
- Ambientes em nuvem, como o Google Apps Script
- Servidor de banco de dados Couchbase
- Ambiente de execução Deno
- Framework de aplicações desktop Electron, usado por aplicativos como Visual Studio Code e Discord
- Servidor de banco de dados MarkLogic
- Framework móvel NativeScript
- Ambiente de execução Node.js