- O padrão Wasm 3.0 foi oficialmente anunciado, incluindo grandes funcionalidades preparadas ao longo de 6 a 8 anos
- Recursos como espaço de endereçamento de 64 bits, coleta de lixo, referências tipadas, tail calls e tratamento de exceções tornam mais fácil compilar linguagens de alto nível para Wasm
- As principais novidades ajudam em aplicações de alto desempenho, runtimes de várias linguagens, segurança e extensibilidade
- É adequado não só para a web, mas também para ecossistemas fora da web, em casos que exigem lidar com capacidades e conjuntos de dados maiores
- Já é suportado pelos principais navegadores web, e deve ser concluído em breve também em motores independentes como o Wasmtime, consolidando ainda mais o Wasm como uma plataforma de execução de uso geral
Visão geral do lançamento do Wasm 3.0
- A versão 3.0 do padrão WebAssembly foi lançada em 17 de setembro de 2025
- É a principal atualização em 3 anos desde a versão 2.0 (concluída em 2022), que introduziu instruções vetoriais, operações de memória em lote, múltiplos valores de retorno e tipos de referência simples
- O Community Group e o Working Group do W3C continuaram o desenvolvimento, e este lançamento traz grandes recursos preparados ao longo de 6 a 8 anos, representando uma mudança de escala considerável
- O Wasm mantém seu espírito de linguagem de baixo nível, ao mesmo tempo em que fortalece o sistema de memória e de tipos para oferecer melhor suporte à compilação de linguagens de alto nível
- Os recursos desenvolvidos desde a versão 2.0 foram finalizados e se estabeleceram como padrão Live, com suporte ampliado em navegadores web e motores independentes
Principais mudanças e novos recursos
- Espaço de endereçamento de 64 bits
- Memórias e tabelas podem ser declaradas com o tipo i64
- O espaço de endereçamento de aplicações Wasm pode ser expandido de cerca de 4 GB até o limite físico (teoricamente 16 exabytes)
- Na web, aplica-se um limite de 16 GB, mas em ecossistemas fora da web isso é útil para dar suporte a aplicações e conjuntos de dados de grande porte
- Múltiplas memórias
- É possível declarar e acessar diretamente vários objetos de memória dentro de um único módulo
- Isso permite diversos usos, como fusão de módulos, separação de espaço de endereçamento, buffering e segurança
- Ferramentas de linkedição estática como wasm-merge passam a poder ser usadas com todos os módulos Wasm
- Coleta de lixo (GC)
- Além da memória linear, há suporte a armazenamento gerenciado automaticamente pelo runtime do Wasm
- O compilador declara diretamente layouts de dados como tipos struct/array e inteiros sem boxing
- São fornecidos apenas os blocos fundamentais de gerenciamento de memória, enquanto sistemas de objetos de alto nível ou closures podem ser projetados separadamente de acordo com a linguagem de implementação
- Referências tipadas
- O sistema de tipos do Wasm foi expandido para descrever com mais precisão a forma de valores no heap e referências de função
- Há suporte a subtipagem e tipos recursivos, e a nova instrução
call_ref permite chamadas indiretas seguras de função sem checagem de tipo em tempo de execução
- Tail calls
- Há suporte à estrutura de tail call, que retorna imediatamente sem uso adicional de espaço de pilha da função existente
- Isso pode ser usado em linguagens funcionais ou em otimizações internas de runtimes
- Tratamento de exceções
- O Wasm passa a ter um sistema nativo de tratamento de exceções
- Ele fornece declaração de tags e payloads de exceção, captura seletiva e handlers de exceção em nível de bloco
- Isso permite melhorar portabilidade e desempenho sem recorrer aos métodos ineficientes antes contornados via JS
- Instruções vetoriais relaxadas
- Para lidar com diferenças de hardware nas instruções SIMD, há uma variante relaxada que deixa a implementação livre para definir certos detalhes de algumas instruções
- Isso permite várias otimizações dentro do conjunto de comportamentos válidos
- Perfil determinístico
- Mesmo em situações em que o resultado da mesma instrução pode ser não determinístico (como operações de ponto flutuante e SIMD relaxado), ele define execução determinística entre plataformas
- Isso permite garantir reprodutibilidade e portabilidade em blockchain, sistemas reproduzíveis e afins
- Sintaxe de anotações customizadas
- Foi adicionada uma sintaxe de anotações legível e gravável por humanos dentro do código-fonte
- Embora não seja interpretada diretamente pelo padrão, ela pode ser usada no futuro em implementações de padrões e extensões
Integração com JavaScript e compatibilidade
- JS string builtins
- Valores de string do JS podem ser passados e manipulados no Wasm como externref
- Ao importar novas funções embutidas, passa a ser possível usar diretamente strings externas de JS dentro do Wasm
Utilidade e perspectivas do Wasm 3.0
- Fornece a base essencial para a compilação de linguagens de programação avançadas para Wasm
- Linguagens importantes como Java, OCaml, Scala, Kotlin, Scheme, Dart e outras já começaram a aproveitar ativamente os recursos de GC
Situação da criação da especificação e da distribuição
- O Wasm 3.0 é o primeiro padrão produzido com a nova toolchain SpecTec
- A maioria dos principais navegadores web já oferece suporte ao Wasm 3.0, e motores independentes como o Wasmtime também devem concluí-lo em breve
- É possível verificar o status de suporte por engine na página Wasm feature status
Ainda não há comentários.