A lentidão do TypeScript escondida à vista de todos
O desenvolvimento em TypeScript envolve dois processos distintos: a transpilação e a verificação semântica de tipos. Ferramentas de build rápidas, como esbuild ou Vite, removem rapidamente a sintaxe do TypeScript, convertendo-a em JavaScript executável. Essa etapa é rápida, levando muitas vezes milissegundos.
O gargalo surge durante a verificação semântica de tipos, que valida o código. Esse processo, essencial para o feedback no editor e para os pipelines de CI, pode levar minutos em projetos grandes. Os desenvolvedores percebem esse atraso como relatórios de erros lentos nas IDEs ou tempos de execução de CI mais longos.
A Microsoft abordou oficialmente o problema com um port em Go do compilador TypeScript, que entrega uma aceleração de 8-12x em relação ao motor legado em JavaScript. Essa versão em Go, parte do TypeScript 7.0, reduziu significativamente os tempos de verificação, por exemplo, diminuindo a verificação de tipos do VS Code de 125,7 segundos para 10,6 segundos.
Recentemente, surgiu uma implementação em Rust liderada pela comunidade, oferecendo um novo concorrente. Desenvolvido rapidamente pela Cloudflare e pelo projeto Oxc com o uso de agentes de IA, este port em Rust da base de código em Go afirma ser quase três vezes mais rápido do que a versão oficial em Go. Embora ainda não esteja integrado em todo o ecossistema, ele passa em mais de 99,9% dos testes de conformidade do TypeScript, demonstrando seu potencial.
O benchmark: 0,3 segundo contra 0,7
Para quantificar a aceleração, um benchmark comparou o compilador legado em JavaScript com os novos ports em Go e em Rust. O teste usou o repositório do TypeScript oficial, uma base de código substancial composta por 793 arquivos e aproximadamente 380.000 linhas de código. Quatro cenários avaliaram o desempenho: código perfeitamente válido, um único erro de tipo, uma falha em cascata causada por um tipo central quebrado e recursão profunda.
Nesses cenários diversos, os resultados foram impressionantes. O compilador em JavaScript foi consistentemente o mais lento, variando de 6,6 a 13 segundos. O port em Go melhorou isso significativamente, concluindo as verificações em 0,6 a 2,2 segundos. No entanto, a versão em Rust demonstrou desempenho superior, terminando em apenas 0,2 a 0,5 segundo.
Colocando os números de destaque em perspectiva, o compilador em Rust foi em média cerca de 24 vezes mais rápido do que a implementação original em JavaScript. Mais impressionante ainda, foi quase três vezes mais rápido do que o port em Go neste teste específico. Esses resultados evidenciam o potencial de melhorias substanciais na experiência do desenvolvedor.
É fundamental lembrar que os resultados de benchmarks podem variar. Fatores como especificações de hardware, estrutura do projeto, versões específicas do compilador e a metodologia exata do benchmark podem influenciar o desempenho. Ainda assim, a aceleração consistente e drástica observada com o port em Rust é um desenvolvimento significativo para o ecossistema do TypeScript.
Agentes de IA copiaram um design conquistado a duras penas
Notavelmente, o port em Rust não se originou de um engenheiro humano projetando um novo sistema de tipos. Em vez disso, um engenheiro dirigiu agentes de IA, principalmente o Claude Opus 3.5, para traduzir o compilador em Go existente da Microsoft para Rust, função por função. Essa abordagem baseou-se em uma tradução mecânica, e não criativa.
Essa estratégia de tradução aproveitou a extensa suíte de conformidade do TypeScript, composta por mais de 13.000 casos de teste. Cada caso de teste especifica os erros de diagnóstico exatos que um compilador em conformidade deve reportar. Os agentes portavam uma função, executavam os testes correspondentes, depuravam eventuais discrepâncias e, então, passavam para a função seguinte.
Passar em todos esses testes, como a versão em Rust faz agora, confirma sua compatibilidade e sua capacidade de produzir resultados de verificação de tipos idênticos aos do compilador oficial em Go. Isso permitiu uma iteração rápida e verificável em apenas três semanas de desenvolvimento. Para saber mais sobre o port oficial em Go, consulte A 10x Faster TypeScript - Microsoft Developer Blogs.
No entanto, passar nos testes de conformidade verifica principalmente a correção da saída. Isso não garante, por si só, desempenho equivalente em todos os tipos de projeto, integração perfeita com editores ou prontidão imediata para produção em todas as bases de código. Embora os benchmarks apresentados no vídeo sejam convincentes, mais integração e testes em cenários reais serão essenciais para consolidar sua adoção mais ampla.
Gostando do artigo? Receba um assim na sua caixa de entrada toda manhã.
um e-mail por dia · cancele em dois cliques · sem rastreadores de terceiros
A velocidade é empolgante; a adoção é o verdadeiro teste
Os ganhos de desempenho do Rust são empolgantes, mas sua proposta com WebAssembly oferece um motivo convincente para a adoção. A Cloudflare, por exemplo, pretende executar ferramentas de desenvolvimento diretamente em ambientes de navegador e de edge. O Rust compila para WebAssembly sem incluir um coletor de lixo, ao contrário do Go, o que o torna ideal para uma execução leve e isolada em sandbox.
A implementação em Go do compilador TypeScript pela Microsoft continua sendo a referência oficial, impulsionando o TypeScript 7.0 com ganhos significativos de velocidade. O port em Rust, porém, está sendo desenvolvido dentro do projeto Oxc, um conjunto de ferramentas em Rust criado pelos autores do Vite. Isso o posiciona para aplicações futuras, como linting com reconhecimento de tipos no Oxc Lint, aproveitando sua velocidade para feedback em tempo real.
Considere o benchmark um sinal promissor, não uma garantia universal. Verifique a compatibilidade e o suporte de ferramentas para a stack específica do seu projeto antes de integrá-lo. Observe se essas otimizações e integrações chegam aos fluxos de trabalho do dia a dia, reduzindo os tempos de ciclo para os desenvolvedores na prática. O verdadeiro teste para o port em Rust será a sua trajetória, de um benchmark impressionante a uma utilidade prática e amplamente difundida.
Perguntas frequentes
O compilador TypeScript em Rust é um lançamento oficial da Microsoft?
Não. É um port em Rust liderado pela comunidade e associado ao projeto Oxc; o port nativo oficial do compilador da Microsoft é escrito em Go.
Quão mais rápido foi o compilador em Rust no benchmark do vídeo?
No teste do repositório do TypeScript, foi em média cerca de 24 vezes mais rápido do que o compilador em JavaScript e quase três vezes mais rápido do que o port em Go.
Por que criar um compilador TypeScript em Rust?
A ausência de um coletor de lixo (garbage collector) em Rust pode tornar atraente o empacotamento para WebAssembly, enquanto o port também explora otimizações de desempenho e de memória.
O port em Rust foi escrito por IA?
Agentes de IA realizaram grande parte do port mecânico sob a direção de um engenheiro, usando o compilador da Microsoft e os testes de conformidade do TypeScript como guias.

