30 pontos por GN⁺ 2025-03-12 | 24 comentários | Compartilhar no WhatsApp
  • A Microsoft anunciou uma melhoria de desempenho de 10x no TypeScript por meio da portabilidade nativa do compilador e das ferramentas
  • Grande melhora no tempo de inicialização do editor, redução de 10x no tempo de build e forte queda no uso de memória
  • Até meados de 2025, será lançada uma versão prévia do tsc, e no fim de 2025 está prevista a oferta de build completo de projetos e serviço de linguagem

Contexto da melhoria de desempenho do TypeScript

  • O valor central do TypeScript é a excelente experiência para desenvolvedores
  • Quanto maior a base de código, maior o valor do TypeScript, mas em projetos de grande escala surgem problemas de desempenho
    • Ocorrem problemas de carregamento e verificação demorados
    • É necessário equilibrar inicialização rápida do editor e análise de toda a base de código
  • Recursos baseados em IA precisam fornecer informações semânticas rápidas e precisas
  • Aumenta a demanda por validação do estado da base de código por meio de builds via linha de comando

Plano de avanço da portabilidade nativa

  • Início do trabalho de portabilidade nativa do compilador e das ferramentas do TypeScript
  • Metas de melhoria de desempenho:
    • Redução drástica no tempo de inicialização do editor
    • Redução de até 10x no tempo de build
    • Redução no uso de memória
    Publicidade
  • Meados de 2025: previsão de lançamento de uma versão prévia do tsc com verificação de tipos pela linha de comando
  • Fim de 2025: previsão de suporte a build completo de projetos e serviços de linguagem

Execução de código e testes

  • É possível compilar e executar o código no repositório do código TypeScript em Go
  • O repositório fornece instruções para compilar e executar o tsc e o servidor de linguagem
  • Estão previstos updates regulares sobre os novos recursos

Quanto ficou mais rápido?

  • Ao testar o tempo de build do projeto TypeScript em várias bases de código populares, surgiram os seguintes ganhos de desempenho:
    • O projeto VS Code, com cerca de 1,5 milhão de linhas de código, passou de 77,8 segundos para 7,5 segundos, ficando cerca de 10,4x mais rápido
    • O projeto Playwright, com cerca de 350 mil linhas de código, passou de 11,1 segundos para 1,1 segundo, com melhora de cerca de 10,1x
    • O projeto TypeORM, com cerca de 270 mil linhas de código, passou de 17,5 segundos para 1,3 segundo, com melhora de cerca de 13,5x
    • O projeto date-fns, com cerca de 100 mil linhas de código, passou de 6,5 segundos para 0,7 segundo, com melhora de cerca de 9,5x
    • O projeto tRPC, com cerca de 18 mil linhas de código, passou de 5,5 segundos para 0,6 segundo, com melhora de cerca de 9,1x
    • O projeto rxjs, com cerca de 2 mil linhas de código, passou de 1,1 segundo para 0,1 segundo, com melhora de cerca de 11x
  • Embora os recursos ainda não estejam completos, espera-se uma melhoria de desempenho superior a 10x na maioria das bases de código
  • Isso permite verificação de tipos e navegação de código mais rápidas
  • Também pode viabilizar integração com ferramentas de IA e suporte a refatorações avançadas

Melhoria de desempenho no editor

  • Melhora na velocidade de carregamento e resposta do editor
  • Tempo de carregamento com base no codebase do Visual Studio Code:
    • Atual: 9,6 segundos → versão nativa: 1,2 segundo (cerca de 8x melhor)
    Publicidade
  • O uso de memória também caiu cerca de 50%
  • Espera-se melhora no desempenho de tarefas do serviço de linguagem, como autocomplete, quick info e ir para a definição
  • O trabalho de migração está em andamento com base no Language Server Protocol (LSP)

Roteiro de versões

  • O TypeScript 5.8 já foi lançado, e o TypeScript 5.9 deve sair em breve
  • A base de código do TypeScript em JS continuará em desenvolvimento na linha 6.x
  • Quando a base de código nativa estiver estabilizada, o lançamento está previsto como TypeScript 7.0
    • TypeScript 6 → versão baseada em JS
    • TypeScript 7 → versão baseada em código nativo
  • Mesmo após o lançamento do TypeScript 7, a linha 6.x será mantida por um período

Próximos passos

  • Está prevista a divulgação de mais informações sobre desempenho, API do compilador e LSP
  • É possível conferir perguntas frequentes no FAQ do GitHub
  • Está previsto um AMA em 13 de março de 2025 no Discord da comunidade TypeScript (10h PDT | 17h UTC)

24 comentários

 
click 2025-05-25

Achei que muita gente estava fazendo isso sem nem pensar em structural typing.
Para reescrever em uma linguagem de nominal typing como C# ou Rust, seria preciso mudar demais a estrutura fundamental do projeto, então certamente não seria fácil.
Entre as linguagens que adotam structural typing, as únicas que provavelmente conseguiriam entregar desempenho superior ao ecossistema JavaScript existente seriam C++ ou Go, mas, considerando também a produtividade, não há alternativa.

 
kuthia 2025-03-13

Em algum momento, comecei a mexer menos com TS, mas ao ver uma notícia dessas, fico curioso de novo.

 
[Este comentário foi ocultado.]
 
pitou106 2025-03-14

No ts, se você sair usando any à vontade, exceto nos casos realmente inevitáveis, no fim não é muito diferente de usar vanilla... rs

 
yshrust 2025-03-13

Parece que a polêmica está bem quente, tanto que o próprio Anders Hejlsberg deixou um comentário

https://github.com/microsoft/typescript-go/…

 
jjpark78 2025-03-13

Alguém que gostaria que, ao compilar com TypeScript, o resultado saísse direto como binário

 
passerby 2025-03-13

Sou leigo em front-end... isso é diferente do swc?

 
caniel 2025-03-13

O SWC se concentra em gerar código JavaScript compatível, como o Babel, e até em fazer bundling; já isto se concentra em transformar código TypeScript em JavaScript ou verificar erros de tipo.

 
halfenif 2025-03-12

Se o código do TypeScript deixar de ser escrito em TypeScript, a equipe deixará de usar o TypeScript diretamente, o que pode afetar a experiência de desenvolvimento no longo prazo.

Dizem que é preciso comer a própria comida, ou seja, usar diretamente aquilo que você mesmo criou. Mas, no caso de uma linguagem, isso realmente faz pensar um pouco.

 
dongjinahn 2025-03-14

Na minha opinião pessoal, como os runtimes de JS que servem de base para o ts (por exemplo, spidermonkey, v8) em sua maioria são escritos em C++ e não existe runtime implementado em JS,
sem falar que até a compilação de js -> js fica lenta demais usando pure JS, então quando você vê todo mundo migrando para coisas como esbuild e afins,
acabo achando que, no ts também, talvez não faça tanto sentido insistir em comer a própria comida de cachorro.

 
wogns3623 2025-03-12

Fico preocupado que, mais tarde, a manutenção do codebase TypeScript existente acabe sendo negligenciada.

 
tsboard 2025-03-12

Que boa notícia! Curiosamente, a linguagem TypeScript da MS parece fazer muitas escolhas realmente inesperadas, ao contrário do que se imaginava. Do ponto de vista da MS, sendo praticamente o seu primeiro projeto open source, também pareceu uma decisão muito sensata tentar complementar o JS, ao contrário do Dart do Google, que buscava substituí-lo; e nesta nova linguagem para port nativo, embora devesse ter várias linguagens próprias à disposição, também surpreende o fato de terem escolhido o Go, do Google.

 
galadbran 2025-03-12

Ué, acho que já existe algo do lado do Deno que criou um toolchain baseado em Rust... por que de repente Go?

 
asheswook 2025-03-12

Parece que você está falando de um runtime como o Node, mas o que está sendo mencionado aqui é o compilador da própria linguagem TS.

 
galadbran 2025-03-13

Ah, lendo um pouco mais o texto, acho que fiquei confuso porque havia uma parte falando que o editor ficaria mais rápido.

  • O tsc ficou 10 vezes mais rápido. Ou seja, o tempo de transpilaçāo de ts -> js foi muito reduzido.
  • Ao carregar um projeto grande desenvolvido em ts, como o VSCode, a velocidade fica muito maior. Ou seja, significa que a lógica que compartilha recursos do tsc, como a verificação de sintaxe do ts, ficou mais rápida.
  • Isso não quer dizer que a velocidade de funcionamento do VSCode tenha aumentado. Era esse o conteúdo, então.
 
illiil1lii 2025-03-12

Já tive a experiência de usar tipos genéricos compostos por recursão e, por causa da lentidão, recorrer a alternativas. Se for 10 vezes mais rápido, fico na expectativa de que esse tipo de ponto também melhore.

 
tujuc 2025-03-12

A discussão sobre por que Go é interessante.

https://github.com/microsoft/typescript-go/discussions/411

Também há muitas coisas a considerar...

 
tsboard 2025-03-12

Pois é, mas também dá pra entender como os desenvolvedores de .NET se sentem...

 
riki3 2025-03-12

Os desenvolvedores de .NET e Rust ficaram bem irritados.

 
bungker 2025-03-12

Entendo o .NET, mas acho que Rust está mais na mesma posição que Go. De qualquer forma, imagino que os projetos e bibliotecas de JS relacionados a Go que já existiam também tenham influenciado a decisão.

 
aa1567 2025-03-12

O desenvolvimento da linguagem C# não parou, mas dá muito a sensação de que os frameworks que usam C# estão sendo deixados de lado.

 
clastneo 2025-03-12

Escreva em Go~

 
caniel 2025-03-12

Estou muito animado.

 
GN⁺ 2025-03-12
Comentários do Hacker News
  • Daniel Rosenwasser, da equipe do TypeScript, compartilha o anúncio e diz que está pronto para responder perguntas junto com o líder da equipe, Ryan Cavanaugh
    • É possível obter mais informações no AMA do Discord
  • Ferramentas de desenvolvimento rápidas são excelentes, e é bom ver que a equipe do TypeScript sempre pensa profundamente na experiência de desenvolvimento
    • Se o código do TypeScript deixar de ser escrito em TypeScript, a equipe pode acabar não usando mais o próprio TypeScript, o que pode afetar a experiência de desenvolvimento no longo prazo
    • Menciona o caso do Flow, escrito em OCaml, que fracassou, e pergunta o que a equipe pensa sobre isso
  • São citados dois projetos que já tentaram criar um tsc rápido em Rust
    • stc: descontinuado
    • ezno: em desenvolvimento ativo e sem o objetivo de ter correspondência 1:1 com o tsc
  • Projetos muitas vezes começam com uma linguagem de script flexível, mas no fim uma expressão mais nativa tende a vencer
    • A pessoa acha que talvez seja melhor começar com uma expressão de nível mais baixo
    • Isso leva a repensar a suposição padrão de usar runtimes JS no servidor
    • As vantagens das linguagens de script estão diminuindo cada vez mais
  • Por um momento, achei que fosse pegadinha de 1º de abril
  • Foi uma boa escolha optar por Go
    • Foi impressionante terem escolhido Go em vez de Rust
    • É uma pena não terem escolhido .NET com compilação AOT
  • É importante manter a nova base de código o mais compatível possível com a anterior
    • A sintaxe de Go é parecida com a da base de código em TypeScript, o que facilita a migração
  • Surpresa com a semelhança sintática entre Golang e TypeScript
    • Compartilha uma experiência em que foi difícil usar sum types em Golang
  • Apresenta um podcast em que Daniel e Anders discutem em profundidade o port nativo
  • Problemas de desempenho surgem no processo de refatoração de arquivos TypeScript muito grandes
    • A migração da base de código para TypeScript ajudou muito a equipe, mas os problemas de desempenho ainda existem
  • A pessoa usava PHP e começou a usar TypeScript há 4 anos
    • O sistema de tipos do TypeScript é útil, e a velocidade de compilação é rápida
    • Não é fã da Microsoft, mas acha que TypeScript é uma linguagem bem-feita