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á 18 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]