Atualizar Versão do Zig — Migrar entre Versões

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:

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

  1. Ler changelog e breaking changes
  2. Criar branch separada
  3. Instalar nova versão do Zig
  4. Tentar compilar e corrigir erros
  5. Atualizar dependências
  6. Rodar todos os testes
  7. Atualizar ZLS
  8. Atualizar CI/CD
  9. Testar em todos os targets
  10. Documentar a nova versão no projeto
  11. Merge para main quando estável

Veja Também

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.