ZON em Zig — O que é e Como Usar

ZON em Zig — O que é e Como Usar

Definição

ZON (Zig Object Notation) é o formato de dados nativo do Zig, inspirado na sintaxe de literais anônimos da linguagem. ZON é usado principalmente no arquivo build.zig.zon para declarar metadados e dependências de pacotes. Ele oferece uma alternativa ao JSON e TOML que é nativa do ecossistema Zig, com sintaxe familiar para programadores Zig.

Por que ZON Importa

  1. Nativo do Zig: Usa a mesma sintaxe de structs anônimas e literais do Zig.
  2. Manifesto de pacotes: O build.zig.zon é o arquivo de configuração central de qualquer projeto Zig.
  3. Tipagem: Diferente de JSON, suporta tipos como enums e multiline strings.
  4. Sem ambiguidade: Sintaxe clara e consistente, sem as armadilhas do JSON (trailing commas, comentários).

Exemplo Prático

Sintaxe ZON Básica

// Arquivo: build.zig.zon
.{
    .name = "meu-projeto",
    .version = "1.0.0",

    .dependencies = .{
        .minha_lib = .{
            .url = "https://example.com/lib.tar.gz",
            .hash = "1220abcdef1234567890abcdef1234567890abcdef1234567890abcdef12345678",
        },
    },

    .paths = .{
        "build.zig",
        "build.zig.zon",
        "src",
    },
}

Comparação com JSON

// ZON
.{
    .nome = "Zig Brasil",
    .versao = "0.1.0",
    .tags = .{ "zig", "brasil", "programação" },
    .ativo = true,
}

// JSON equivalente
{
    "nome": "Zig Brasil",
    "versao": "0.1.0",
    "tags": ["zig", "brasil", "programação"],
    "ativo": true
}

Lendo ZON em Código Zig

const std = @import("std");

// @embedFile pode incluir um arquivo ZON em comptime
// Mas para build.zig.zon, o sistema de build faz o parsing automaticamente

const config = .{
    .porta = 8080,
    .host = "0.0.0.0",
    .max_conexoes = 1000,
    .debug = false,
};

pub fn main() void {
    std.debug.print("Servidor em {s}:{}\n", .{ config.host, config.porta });
    std.debug.print("Max conexões: {}\n", .{config.max_conexoes});
}

Tipos de Dados em ZON

Tipo ZONExemploEquivalente JSON
String"texto""texto"
Inteiro4242
Float3.143.14
Booleantrue / falsetrue / false
Nullnullnull
Struct.{ .campo = valor }{ "campo": valor }
Array.{ 1, 2, 3 }[1, 2, 3]
Enum.nome_valorN/A

Armadilhas Comuns

  • Não é JSON: ZON usa .campo = com ponto, não "campo": com aspas. Não tente usar JSON no lugar de ZON.
  • Trailing comma: ZON permite vírgula após o último item (como Zig). JSON não.
  • Comentários: ZON atualmente não suporta comentários, apesar de Zig (a linguagem) suportar.
  • Parsing em runtime: ZON é primariamente usado em comptime. Para dados em runtime, considere JSON com std.json.

Termos Relacionados

Tutoriais Relacionados

Continue aprendendo Zig

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