Skip to content

Introdução

Estamos na Terceira Era do JavaScript — a tendência atual é escrever ferramentas JS em Rust ou Go para ganhar desempenho.

Mas construir essas ferramentas é difícil; em Rust, ainda mais. Sofri bastante aprendendo e gostaria que menos gente repetisse o mesmo caminho.

Este guia é minha contribuição para a comunidade para encurtar essa jornada.

Há pouquíssimos devs do lado Rust aqui — adoraria ver você entrar para construirmos ferramentas melhores e mais rápidas.

Visão geral

Seguimos as fases típicas do frontend de um compilador:

Source Text --> Lexer --> Token --> Parser --> AST

Fazer um parser de JavaScript “de verdade” é majoritariamente 10% arquitetura e 90% detalhes chatos.

As decisões de arquitetura afetam principalmente:

  • desempenho do parser;
  • como é agradável consumir sua AST.

Conhecer opções antes de codificar em Rust deixa o percurso muito menos doloroso.

Desempenho

Rust rápido costuma significar alocar menos memória e gastar menos ciclos de CPU.

Você acha heap olhando Vec, Box, String etc. Mais alocações → código mais lento.

Abstrações em Rust são zero-cost na teoria — cuide mesmo da complexidade algorítmica.

INFO

Leia também The Rust Performance Book.

Código-fonte Rust

Se não conseguir inferir o custo de uma chamada, clique em “source” na documentação oficial — na maioria das vezes o código ajuda mesmo.

INFO

Procurando definições: fn nome, struct Nome, enum Nome… gramática bem regular em Rust — diferente do JavaScript 😉.