Ir para o conteúdo

V8 (JavaScript)

Origem: Wikipédia, a enciclopédia livre.
V8
DesenvolvedorGoogle[1]
Lançamento inicial2 de setembro de 2008; há 17 anos (2008-09-02)
Repositório
Escrito emC++[1]
PlataformaIA-32, x86-64, ARM (32 bits), AArch64, MIPS (32 bits), MIPS64, PowerPC, IBM ESA/390, z/Architecture
TipoMecanismo de JavaScript e WebAssembly
LicençaBSD de 3 cláusulas[2]
Websitev8.dev Edit this on Wikidata

O V8 é um mecanismo de JavaScript e WebAssembly de código aberto desenvolvido pela Google para o seu navegador Google Chrome.[1][3] É 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.[1] 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

[editar | editar código]

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.[3] O nome é uma referência ao motor V8, e seu desenvolvedor principal foi Lars Bak.[4] Por diversos anos, o Chrome manteve uma velocidade de execução de JavaScript superior à de seus concorrentes.[5][6][7]

O assembler do V8 baseia-se no montador da linguagem Strongtalk.[8] Em 7 de dezembro de 2010, foi lançada uma nova infraestrutura de compilação chamada Crankshaft, que trouxe melhorias substanciais de desempenho.[9] Na versão 41 do Chrome, em 2015, o projeto TurboFan foi introduzido para otimizar cargas de trabalho complexas, tais como asm.js.[10] 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.[11]

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.[12] 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.[13]

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.[14]

O V8 inicia o processamento gerando uma árvore de sintaxe abstrata com um analisador próprio.[15] Em seguida, o Ignition gera bytecode a partir dessa árvore.[16] O TurboFan compila esse bytecode em código de máquina nativo utilizando compilação Just-In-Time (JIT) antes de sua execução.[17] 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.[18]

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.[19][20][21]

O motor pode ser integrado em navegadores ou em projetos independentes. Ele é empregado nos seguintes softwares:

Ver também

[editar | editar código]

Referências

[editar | editar código]
  1. 1 2 3 4 «Documentation · V8». Google. Consultado em 3 de março de 2024
  2. «v8/LICENSE.v8 at master». GitHub
  3. 1 2 Lenssen, Philipp (1 de setembro de 2008). «Google on Google Chrome - comic book». Google Blogoscoped (em inglês). Consultado em 17 de agosto de 2010
  4. «V8: an open source JavaScript engine». YouTube. Google. 15 de setembro de 2008. Consultado em 15 de março de 2024
  5. «Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome». PC Games Hardware. Computec Media AG. 3 de julho de 2009. Consultado em 28 de junho de 2010. Cópia arquivada em 2 de maio de 2012
  6. Purdy, Kevin (11 de junho de 2009). «Lifehacker Speed Tests: Safari 4, Chrome 2». Lifehacker. Consultado em 8 de maio de 2021. Cópia arquivada em 14 de abril de 2021
  7. «Mozilla asks, 'Are we fast yet?'». Wired. Consultado em 18 de janeiro de 2019. Cópia arquivada em 22 de junho de 2018
  8. «V8 JavaScript Engine: License». Google Code. Consultado em 17 de agosto de 2010. Cópia arquivada em 22 de julho de 2010
  9. «A New Crankshaft for V8». Chromium Blog. 7 de dezembro de 2010. Consultado em 22 de abril de 2011
  10. «Revving up JavaScript performance with TurboFan». 7 de julho de 2015. Consultado em 5 de março de 2016
  11. «Experimental support for WebAssembly in V8». v8.dev. Consultado em 12 de março de 2024
  12. «BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8». YouTube. 26 de junho de 2016. Consultado em 2 de setembro de 2016. Cópia arquivada em 21 de dezembro de 2021
  13. «Launching Ignition and TurboFan». 16 de maio de 2017. Consultado em 13 de julho de 2017
  14. «Maglev - V8's Fastest Optimizing JIT». 5 de dezembro de 2023. Consultado em 26 de janeiro de 2024
  15. Verwaest, Toon (25 de março de 2019). «Blazingly fast parsing, part 1: optimizing the scanner · V8». v8.dev. Consultado em 1 de junho de 2021. Cópia arquivada em 21 de abril de 2021
  16. Hinkelmann, Franziska (19 de dezembro de 2017). «Understanding V8's Bytecode». Medium (em inglês). Consultado em 17 de outubro de 2019
  17. «Firing up the Ignition interpreter · V8». v8.dev. Consultado em 30 de setembro de 2020
  18. «A game changer for interactive performance». blog.chromium.org. 21 de novembro de 2011. Consultado em 6 de fevereiro de 2022
  19. «PPC support for Google V8 goes mainstream». 30 de junho de 2015. Cópia arquivada em 12 de setembro de 2015
  20. «GitHub - ibmruntimes/v8ppc: Port of Google V8 javascript engine to PowerPC®.». 21 de abril de 2019 via GitHub
  21. «Port of Google V8 JavaScript engine to z/OS. The Linux on Z port is maintained in the community: ibmruntimes/v8z». 2 de abril de 2019 via GitHub
  22. «V8 Runtime Overview | Apps Script». Google for Developers. Consultado em 26 de janeiro de 2025
  23. «A secure JavaScript/TypeScript runtime built with V8, Rust, and Tokio: denoland/deno». 8 de julho de 2019 via GitHub
  24. «Overview - NativeScript Docs». docs.nativescript.org. Consultado em 8 de julho de 2019. Cópia arquivada em 28 de julho de 2020
  25. Jolie O'Dell (10 de março de 2011). «Why Everyone Is Talking About Node». Mashable

Ligações externas

[editar | editar código]