Transcript
00:00:00O TypeScript acabou de lançar um candidato a versão 7 e esta será a versão onde
00:00:04o TypeScript não é o TypeScript. Se você estava por fora, eles vêm trabalhando na reescrita do
00:00:07compilador do TypeScript, do TypeScript em si para Go, e aparentemente os resultados são 10 vezes mais rápidos.
00:00:12Eles esperam lançar o TypeScript 7 no próximo mês, então vamos conferir o que realmente mudou,
00:00:17quão rápido ele é e se há alguma mudança drástica que você precisa saber antes de instalar.
00:00:26Então, se você perdeu a notícia sobre a migração para Go, eles começaram isso há cerca de um ano,
00:00:29e o resumo é que perceberam que o JavaScript nunca foi feito para o trabalho pesado de CPU
00:00:34que um verificador de tipos faz, então começaram a reescrevê-lo em Go, com grande sucesso inicial.
00:00:39Eles começaram basicamente portando a implementação existente do TypeScript, essencialmente linha por linha,
00:00:44então a lógica de verificação de tipos era estruturalmente a mesma e tinha o mesmo comportamento,
00:00:48e você podia até ver que algumas das funções eram quase idênticas, além da linguagem.
00:00:52Também tenho quase certeza de que isso foi antes de você poder simplesmente apontar o Claude
00:00:56para sua base de código e dizer: “Migre para a linguagem que você quiser”.
00:01:00Estou olhando para você, Bun. Os resultados da migração falam por si. Aqui eu tenho
00:01:04o repositório do Playwright e, se eu fizer uma verificação de tipos usando a versão antiga do TypeScript aqui,
00:01:08podemos ver que isso leva cerca de seis segundos para ser concluído e passou por 1400 arquivos
00:01:12e meio milhão de linhas de código. Se eu mudar agora para a versão candidata sem mudar nada além desse comando,
00:01:18no total, levou 0,87 segundos. Isso é uma melhoria séria. Ele também encontrou exatamente a mesma quantidade
00:01:23de erros, os mesmos erros. Ele passou pelos mesmos arquivos e todas as linhas de código, então funciona
00:01:27exatamente como o TypeScript 6. O código nativo do Go é simplesmente mais rápido que o JavaScript
00:01:32para uma tarefa como essa, mas também permite que eles usem paralelismo de memória compartilhada.
00:01:37Então, onde o compilador JavaScript era de thread única, o Go pode realmente espalhar essa verificação
00:01:41de tipos por vários núcleos ao mesmo tempo. No TypeScript 7, você pode forçá-lo a ser de thread única
00:01:46com uma flag, talvez você esteja fazendo alguma depuração ou rodando em uma máquina com recursos limitados.
00:01:50E se eu fizer isso na base de código do Playwright, aqui com o TypeScript 7, podemos ver
00:01:54que, quando em thread única, isso leva cerca de dois segundos, o que ainda é três vezes mais rápido
00:01:58e isso tem como padrão quatro; aumentar esse número pode acelerar suas compilações em bases de código maiores se você
00:02:03tiver muitos núcleos de CPU, mas isso terá o custo de um uso extra de memória se eu definir os “checkers”
00:02:08Isso usa quatro por padrão. Aumentar isso pode acelerar seus builds em bases de código maiores
00:02:12se você tiver muitos núcleos de CPU, mas custará mais uso de memória. Se eu definir os “checkers”
00:02:16para oito neste repositório do Playwright, que é o dobro do padrão, parece reduzir
00:02:20outro terço do tempo. Há também uma nova flag de “builders” para paralelizar builds de referência de projeto,
00:02:24ou seja, construir vários projetos de uma só vez. Essa flag permite controlar o número de “builders” paralelos
00:02:29que podem rodar ao mesmo tempo. Vale notar que se você combinar isso com os “checkers” que acabamos de ver,
00:02:34digamos que você tenha quatro de cada, significa que você pode ter até 16 verificadores de tipo rodando
00:02:38ao mesmo tempo. Além das mudanças de código nativo e paralelismo, outra grande reescrita no TypeScript 7
00:02:43foi seu modo de observação (“watch mode”). Quando migraram para Go, isso foi um pouco mais complicado,
00:02:47já que a biblioteca padrão não fornece APIs de observação de arquivos nativas, e as bibliotecas de terceiros
00:02:53que tentaram tinham problemas com coisas como estabilidade, desempenho e suporte multiplataforma.
00:02:57Então, a equipe olhou para o observador de arquivos do bundler Parcel, que a Microsoft
00:03:01usa um pouco no VS Code. Mas como era em C++, eles também tiveram que portar as partes de que precisavam
00:03:05para Go também. A boa notícia é que eles fizeram tudo e parece estar funcionando muito bem
00:03:10e melhor do que antes. Em seguida, como esta é uma mudança de versão principal, você pode estar esperando
00:03:14muitas mudanças drásticas, especialmente porque é uma grande reescrita, mas acho que não há nenhuma
00:03:19se você estiver atualizando do TypeScript 6 para o 7. Se você quiser ir do 5 para o 7, haverá
00:03:24bastante. Então, parece que eles recomendam que você vá até o 6 primeiro, faça tudo funcionar,
00:03:31e então a atualização de versão para o 7 não deve ser problema. Algumas das grandes mudanças no TypeScript 6
00:03:36foram a remoção do alvo ES5, a remoção da “baseUrl” e a descontinuação dos sistemas de módulo AMD, UMD e SystemJS.
00:03:40Eles também tornaram o “strict” como “true” por padrão, fizeram o módulo ser “esnext” por padrão,
00:03:45e o alvo passou a ser a versão estável atual do ECMAScript imediatamente anterior ao “esnext”.
00:03:49Foi basicamente muito “deixar o passado para trás” e modernizar o TypeScript, o que eu realmente gosto,
00:03:53já que, às vezes, tentar suportar projetos legados em cada versão que você cria pode realmente retardar
00:03:59o progresso de uma ferramenta. Olhando para o resto desta postagem do blog, parece que a única
00:04:04nova funcionalidade ou mudança que realmente diz respeito à linguagem TypeScript em si é que os tipos
00:04:09de template literal agora preservam pontos de código Unicode. Essencialmente, antes do TypeScript 7, o TypeScript
00:04:13realmente dividia em unidades de código UTF-16, então ele acabava dividindo um emoji ao meio,
00:04:18e você acabava com esses tipos estranhos de cabeça e cauda. Aqui, no TypeScript 7, no entanto,
00:04:22ele realmente divide em pontos de código inteiros, ou seja, caracteres completos. Então, agora o emoji
00:04:27é preservado e a divisão é praticamente como você esperaria que fosse. Eu, honestamente, ficaria
00:04:32incrivelmente impressionado se algum de vocês já tivesse encontrado isso em seu tempo usando o TypeScript.
00:04:36Ao todo, essas mudanças devem fazer com que tudo o que usa o TypeScript pareça muito mais rápido,
00:04:41como o TypeScript no seu editor, especialmente para grandes projetos. O lançamento estável é esperado
00:04:44dentro de cerca de um mês, mas uma API programática estável, ou seja, aquilo que os criadores de ferramentas usam para construir sobre o compilador, está chegando na versão 7.1. Por causa disso, há também um pacote de compatibilidade, para que você possa rodar o TypeScript 6 e 7 lado a lado sem entrar em conflito. Me diga o que você acha de tudo isso e estou curioso se você já sentiu que o TypeScript estava lento. Deixe-me saber nos comentários. Enquanto você está aí embaixo, inscreva-se e, como sempre, nos vemos na próxima.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video