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 --> ASTFazer 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 😉.