- Na recente 108ª reunião do TC39, 9 propostas que devem guiar o futuro do JavaScript avançaram em diferentes etapas da padronização
- Em Stage 4 (aprovação final), estão incluídos recursos como
using, Array.fromAsync e Error.isError, que aumentam a produtividade e a segurança no desenvolvimento
- Em Stage 3~1, estão em discussão várias propostas úteis, como ArrayBuffer imutável, aleatoriedade com seed, clamp, melhorias no NumberFormat e funções Random
- O Deno tem adotado e experimentado ativamente os padrões mais recentes, e alguns recursos já podem ser usados no Deno e nos navegadores modernos
- As discussões de padronização devem continuar no futuro, e espera-se que o ecossistema JavaScript evolua para se tornar mais seguro e mais conciso
Tendências mais recentes da padronização no TC39 e principais novos recursos do JavaScript
Stage 4: recursos previstos para adoção oficial
Gerenciamento explícito de recursos (using)
- A declaração
using garante a limpeza automática ao fim do ciclo de vida de objetos de recurso, como arquivos e sockets de rede
- Inspirado em estruturas de linguagens como C# e Python, o objeto implementa os métodos
[Symbol.dispose]() ou [Symbol.asyncDispose]() para serem chamados ao fim do bloco
- Mesmo quando ocorre uma exceção, a limpeza é feita automaticamente, reduzindo o risco de vazamento de recursos, como file handles
- Já há suporte em Chrome 134, Firefox 134, Deno v2.3 e outros, e no Deno ele já pode ser usado imediatamente em cenários reais com arquivos, sockets etc.
Array.fromAsync
- Método padrão que converte iteráveis assíncronos em arrays, retornando uma Promise
- Coleta valores sequencialmente a partir de async generators e, ao final, fornece o resultado em array por meio de uma Promise
- Tem uso semelhante ao
Array.from síncrono já existente e oferece suporte a função de mapeamento e thisArg
- Compatível com todos os principais navegadores, Node v22 e Deno v1.38 ou superior
Error.isError
- Função embutida que permite verificar de forma simples se um valor é um objeto Error real
- Funciona com confiabilidade mesmo em casos complexos, como cross-realm e erros de subclasses
- Aumenta a confiabilidade em polyfills e no desenvolvimento de bibliotecas
Stage 3: ArrayBuffer imutável
Immutable ArrayBuffer
- Está prevista a adição dos métodos
transferToImmutable() e sliceToImmutable() para dar suporte à imutabilidade de ArrayBuffer
- Um buffer imutável, depois de criado, não pode ser modificado nem detached, contribuindo para compartilhamento seguro entre threads e workers e para melhor desempenho
- Em ambientes como o Deno, pode ser usado de forma eficiente no processamento de dados binários sem cópias desnecessárias
Stage 2: novos recursos propostos
Random.Seeded
- Com o PRNG baseado em seed (
Random.Seeded(seed)), é possível gerar a mesma sequência de números aleatórios em execuções repetidas
- Útil em áreas em que a reprodutibilidade é importante, como jogos e simulações
- Diferentemente de
Math.random(), oferece recursos avançados como definição de seed e clonagem de estado
Number.prototype.clamp
- Método de limitação de faixa numérica que ajusta automaticamente um valor para ficar dentro do intervalo mínimo~máximo especificado
- Substitui de forma mais curta e clara o padrão existente
Math.min(Math.max(x, min), max)
Stage 1: propostas em discussão inicial
Keep Trailing Zeros
- Nova opção de
Intl.NumberFormat para controlar com mais precisão a manutenção/remoção de zeros após a casa decimal
- Amplia a expressividade desejada na UI para valores monetários, números de ponto fixo etc.
Comparisons
- Assim como o
util.inspect do Node.js, a proposta busca padronizar a representação amigável para humanos de valores e a saída de diff
- Pode trazer consistência para frameworks de teste, saída de console e afins
Random Functions
- Introduz um novo namespace
Random, reunindo funções relacionadas a aleatoriedade, amostragem e embaralhamento de forma segura e concisa
- Ajuda a evitar erros de off-by-one e dá suporte intuitivo a vários padrões de coleta e amostragem
O futuro do Deno e do ecossistema JavaScript
- O Deno participa ativamente das discussões de padronização e está incorporando rapidamente os recursos mais recentes ao uso prático
- Ex.) propagação de contexto assíncrono, OpenTelemetry embutido, novos padrões de gerenciamento de recursos etc.
- As discussões de padronização devem continuar nas próximas reuniões do TC39 após setembro
- Os desenvolvedores JavaScript poderão experimentar um ambiente de linguagem cada vez mais poderoso, seguro e conveniente no futuro
3 comentários
proposta de operações
awaitIsso, quando...
Quando será que a correspondência de padrões vai ser adicionada?
Há
signalsno stage 1, mas parece que ainda vai demorar bastante para chegar ao lançamento oficial.