V8 (JavaScript)
| V8 | |
|---|---|
| Desenvolvedor | Google[1] |
| Lançamento inicial | 2 de setembro de 2008 |
| Repositório | |
| Escrito em | C++[1] |
| Plataforma | IA-32, x86-64, ARM (32 bits), AArch64, MIPS (32 bits), MIPS64, PowerPC, IBM ESA/390, z/Architecture |
| Tipo | Mecanismo de JavaScript e WebAssembly |
| Licença | BSD de 3 cláusulas[2] |
| Website | v8 |
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]
Projeto
[editar | editar código]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]
Uso
[editar | editar código]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:
- Navegadores baseados em Chromium — Google Chrome, Brave, Opera, Vivaldi e Microsoft Edge.
- Ambientes em nuvem, como o Google Apps Script[22]
- Servidor de banco de dados Couchbase
- Ambiente de execução Deno[23]
- 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[24]
- Ambiente de execução Node.js[25]
Ver também
[editar | editar código]Referências
[editar | editar código]- 1 2 3 4 «Documentation · V8». Google. Consultado em 3 de março de 2024
- ↑ «v8/LICENSE.v8 at master». GitHub
- 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
- ↑ «V8: an open source JavaScript engine». YouTube. Google. 15 de setembro de 2008. Consultado em 15 de março de 2024
- ↑ «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
- ↑ 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
- ↑ «Mozilla asks, 'Are we fast yet?'». Wired. Consultado em 18 de janeiro de 2019. Cópia arquivada em 22 de junho de 2018
- ↑ «V8 JavaScript Engine: License». Google Code. Consultado em 17 de agosto de 2010. Cópia arquivada em 22 de julho de 2010
- ↑ «A New Crankshaft for V8». Chromium Blog. 7 de dezembro de 2010. Consultado em 22 de abril de 2011
- ↑ «Revving up JavaScript performance with TurboFan». 7 de julho de 2015. Consultado em 5 de março de 2016
- ↑ «Experimental support for WebAssembly in V8». v8.dev. Consultado em 12 de março de 2024
- ↑ «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
- ↑ «Launching Ignition and TurboFan». 16 de maio de 2017. Consultado em 13 de julho de 2017
- ↑ «Maglev - V8's Fastest Optimizing JIT». 5 de dezembro de 2023. Consultado em 26 de janeiro de 2024
- ↑ 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
- ↑ Hinkelmann, Franziska (19 de dezembro de 2017). «Understanding V8's Bytecode». Medium (em inglês). Consultado em 17 de outubro de 2019
- ↑ «Firing up the Ignition interpreter · V8». v8.dev. Consultado em 30 de setembro de 2020
- ↑ «A game changer for interactive performance». blog.chromium.org. 21 de novembro de 2011. Consultado em 6 de fevereiro de 2022
- ↑ «PPC support for Google V8 goes mainstream». 30 de junho de 2015. Cópia arquivada em 12 de setembro de 2015
- ↑ «GitHub - ibmruntimes/v8ppc: Port of Google V8 javascript engine to PowerPC®.». 21 de abril de 2019 – via GitHub
- ↑ «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
- ↑ «V8 Runtime Overview | Apps Script». Google for Developers. Consultado em 26 de janeiro de 2025
- ↑ «A secure JavaScript/TypeScript runtime built with V8, Rust, and Tokio: denoland/deno». 8 de julho de 2019 – via GitHub
- ↑ «Overview - NativeScript Docs». docs.nativescript.org. Consultado em 8 de julho de 2019. Cópia arquivada em 28 de julho de 2020
- ↑ Jolie O'Dell (10 de março de 2011). «Why Everyone Is Talking About Node». Mashable
Ligações externas
[editar | editar código]- (em inglês) «Página oficial»