Motor Javascript

2 min de leitura Javascript Programação

Estava querendo aprender sobre todo o ambiente de execução do JavaScript e cheguei nisso aqui, que é um componente essencial e preciso anotar pra lembrar depois.

Dos diferentes ambientes de execução JavaScript existentes, um sempre estará presente: o motor de execução da linguagem. Ele é o responsável por analisar, entender e executar o código-fonte escrito.

Como eu sempre gosto de dar um passo atrás e entender o processo de construção invés de apenas decorar, fui atrás de um padrão de construção do motor de execução de linguagens como o JavaScript e pelo que entendi o core da coisa são 4 etapas, sempre nessa ordem:

1. Scanner → 2. Parser → 3. Interpretador/Compilador → 4. Garbage Collector

1. Scanner (ou Lexer)

Lê o código-fonte caractere por caractere e agrupa em tokens (blocos com significado próprio, como um identificador, um operador ou um número). Nessa fase o código ainda não tem estrutura nenhuma, é só uma lista linear.

2. Parser

Pega essa lista de tokens e monta uma AST (Abstract Syntax Tree), uma árvore que representa como as partes do código se relacionam, seguindo a gramática da linguagem definida em sua especificação (ECMA define a do JavaScript). Nessa etapa aqui é onde estouram os erros de sintaxe.

3. Interpretador e/ou Compilador

Com a AST pronta, dado a otimização do fluxo de execução da linguagem, utiliza-se tanto compilador quanto interpretador, dado a natureza de cada um.

O interpretador percorre a AST (ou um bytecode gerado a partir dela) e já produz o resultado na hora, sem gerar código de máquina. É rápido para começar, mas mais lento para rodar repetidamente.

O compilador traduz a AST (ou bytecode) pra gerar código de máquina antes de rodar. Demora pra começar, mas o código final roda bem mais rápido.

CallStack e Heap entram como estrutura de dados nesse momento.

4. Garbage Collector

Por fim, gerencia a memória (heap) onde objetos, arrays e closures são criados durante a execução.

Assim como todo bom assunto a gente consegue aprofundar bem mais do que o escrito aqui. Como percebi que pode ser bastante extenso, pretendo voltar em cada tópico desses individualmente no futuro.