Atualizar Versão do Zig — Migrar entre Versões
Zig ainda está em desenvolvimento ativo e atualizações podem incluir breaking changes. Este guia ajuda a atualizar de forma segura e resolver incompatibilidades.
Processo de Atualização Seguro
Passo 1: Verificar a Versão Atual
# Versão instalada
zig version
# Versão usada no projeto (se documentada)
cat .zig-version 2>/dev/null
Passo 2: Ler o Changelog
Antes de atualizar, sempre leia o changelog:
- Release notes: ziglang.org/download
- GitHub releases: github.com/ziglang/zig/releases
- Breaking changes: Listados explicitamente nas release notes
Passo 3: Atualizar em Branch Separada
# Criar branch para a atualização
git checkout -b atualizar-zig-0.14
# Instalar nova versão
# macOS
brew upgrade zig
# Linux — baixar nova versão
wget https://ziglang.org/download/0.14.0/zig-linux-x86_64-0.14.0.tar.xz
tar xf zig-linux-x86_64-0.14.0.tar.xz
# Windows
scoop update zig
Passo 4: Tentar Compilar
# Primeiro, tentar compilar
zig build 2>&1
# O compilador indicará o que precisa mudar
# Corrigir cada erro um por um
Passo 5: Rodar Testes
# Rodar todos os testes
zig build test
# Testar em todos os targets usados
zig build -Dtarget=x86_64-linux-gnu
zig build -Dtarget=x86_64-windows
Mudanças Comuns entre Versões
Mudanças de API do Build System
O build system muda frequentemente. Padrões comuns de migração:
// ANTIGO (versões anteriores):
// exe.addPackagePath("mod", "src/mod.zig");
// NOVO:
exe.root_module.addImport("mod", b.addModule(.{
.name = "mod",
.root_source_file = b.path("src/mod.zig"),
}));
// ANTIGO:
// .root_source_file = .{ .path = "src/main.zig" },
// NOVO:
.root_source_file = b.path("src/main.zig"),
Mudanças de Sintaxe da Linguagem
// Mudanças em builtins (exemplos genéricos)
// Builtins podem ser renomeados ou ter assinatura alterada
// Sempre consulte a documentação da nova versão:
// https://ziglang.org/documentation/master/
Mudanças na Standard Library
// Funções podem ser movidas, renomeadas ou removidas
// Exemplo genérico:
// ANTIGO: std.mem.toSlice(u8, ptr)
// NOVO: std.mem.span(ptr)
// ANTIGO: std.fmt.bufPrint(...)
// NOVO: std.fmt.bufPrint(...) // mesma função, parâmetros podem mudar
Atualizar Dependências
# Verificar se dependências suportam a nova versão do Zig
# Consultar o repositório de cada dependência
# Atualizar hash se a dependência tem versão nova
zig fetch --save https://github.com/user/lib/archive/v2.0.tar.gz
# Se a dependência não suporta a nova versão:
# 1. Abrir issue no repositório da dependência
# 2. Usar versão de desenvolvimento (branch main)
# 3. Fazer fork e corrigir
Atualizar o ZLS
Quando atualiza o Zig, sempre atualize o ZLS também:
# macOS
brew upgrade zls
# Ou baixar do GitHub
# https://github.com/zigtools/zls/releases
# Verificar compatibilidade
zig version
zls --version
# Devem ser versões compatíveis
Atualizar o CI
# .github/workflows/ci.yml
# Atualizar a versão no CI
- uses: goto-bus-stop/setup-zig@v2
with:
version: 0.14.0 # Nova versão
Lidar com Breaking Changes
Estratégia 1: Compilação Condicional
const builtin = @import("builtin");
// Código compatível com múltiplas versões (quando necessário)
const zig_version = builtin.zig_version;
Estratégia 2: Correção Iterativa
# Corrigir um erro de cada vez
zig build 2>&1 | head -5
# Corrigir o primeiro erro
# Repetir até compilar limpo
Estratégia 3: Consultar o Compilador
# O compilador frequentemente sugere a correção
zig build 2>&1
# Muitas mensagens de erro incluem "note: " com a sugestão
# Usar zig fmt para corrigir mudanças de formatação
zig fmt src/
Rollback se Necessário
# Se a atualização causa muitos problemas:
git checkout main # Voltar para branch estável
# Reinstalar versão anterior
# Manter múltiplas versões do Zig disponíveis
# Criar aliases: zig-0.13, zig-0.14, etc.
Documentar a Versão do Zig
# Criar arquivo .zig-version no projeto
echo "0.14.0" > .zig-version
# Documentar no README
# ## Requisitos
# - Zig >= 0.14.0
// No build.zig.zon — minimum_zig_version
.{
.name = "meu-projeto",
.version = "1.0.0",
.minimum_zig_version = "0.14.0",
.paths = .{"."},
}
Checklist de Atualização
- Ler changelog e breaking changes
- Criar branch separada
- Instalar nova versão do Zig
- Tentar compilar e corrigir erros
- Atualizar dependências
- Rodar todos os testes
- Atualizar ZLS
- Atualizar CI/CD
- Testar em todos os targets
- Documentar a nova versão no projeto
- Merge para main quando estável
Veja Também
- FAQ Build System — Configuração de build
- Erros no build.zig — Resolver erros do build
- Falha em Dependências — Atualizar dependências
- CI Falha — Atualizar CI
- FAQ Produção — Estabilidade em produção