3 pontos por bus710 12 일 전 | 2 comentários | Compartilhar no WhatsApp

Foi lançado em 14 de abril de 2026. É uma release construída ao longo de 8 meses por 244 contribuidores, com 1.183 commits acumulados.

I/O como uma Interface — o núcleo desta release

Esta é a maior mudança desta release. Quase tudo que pode bloquear, como sistema de arquivos, rede, temporizadores e sincronização, foi unificado na nova interface std.Io. Assim como a alocação de memória precisa de um Allocator, agora todo código que usa I/O precisa receber uma instância de Io. Com isso, ficou possível criar pacotes reutilizáveis independentemente do modelo de concorrência, e loops de eventos também podem ser tratados adequadamente no nível da linguagem.

Há três implementações:

  • Io.Threaded — implementação completa baseada em threads. Também oferece suporte a cancellation, e o comportamento permanece igual ao migrar da 0.15.x
  • Io.Evented — implementação experimental baseada em user-space stack switching (green threads)
  • Io.Uring — implementação PoC baseada em io_uring no Linux

Compilador

  • Compilation Incremental agora também funciona no backend LLVM — quando há erros de compilação, a etapa LLVM Emit Object é ignorada, então os erros podem ser verificados muito mais rápido
  • A resolução de tipos (Type Resolution) foi completamente refeita — o grafo interno de dependências mudou de uma estrutura cíclica para um DAG. Tipos usados apenas como namespace deixam de passar por análises desnecessárias, o que também reduz o tamanho do binário. As mensagens de erro para loops de dependência também mostram muito melhor onde o problema começou
  • Backend aarch64 — está sendo desenvolvido ativamente com o objetivo de se tornar o padrão no modo Debug
  • O fuzzer embutido ficou mais robusto — foram adicionados fuzzing multiprocessos baseado em AST Smith, Infinite Mode e dump de crash

Mudanças na linguagem (Breaking Changes)

Estas são mudanças que exigem migração:

  • @cImport foi movido para o sistema de build
  • O builtin @Type foi removido — substituído por builtins individuais por tipo
  • Lazy Field Analysis foi adicionada — tipos usados apenas como namespace não passam por análise de campos
  • Não é mais possível colocar ponteiros dentro de packed union/struct
  • Muitas APIs relacionadas a posix e os.windows foram removidas

Biblioteca padrão

  • heap.ArenaAllocator agora é thread-safe + lock-free, e o Allocator heap.ThreadSafe foi removido
  • A compactação Deflate foi adicionada, e a API de descompactação também ficou mais simples
  • std.crypto recebeu AES-SIV, AES-GCM-SIV, Ascon-AEAD e Ascon-Hash
  • Thread.Pool, GenericReader / AnyReader / FixedBufferStream foram removidos
  • A rede no Windows funciona mesmo sem ws2_32.dll, e a migração para NtDll também foi concluída

Atualizações da toolchain

Foi atualizado para LLVM 21, musl 1.2.5, glibc 2.43, headers do Linux 6.19, headers do macOS 26.4 e libc do FreeBSD 15.0.


Direção da próxima release (0.17.0)

Os principais objetivos são estabilizar o async I/O, tornar o backend aarch64 o padrão no modo Debug, remover a dependência de LLD e implementar um linker com suporte a Compilation Incremental.

2 comentários

 
bus710 12 일 전

Na noite passada, o Zig Language Server também foi lançado na versão 0.16.

Como muitas vezes o language server só saía vários meses depois da linguagem, eu acabava hesitando em usar a versão mais recente; desta vez, porém, uma versão compatível saiu realmente rápido. Graças a isso, ficou mais fácil e mais rápido usar essa nova versão.