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
- Nativo do Zig: Usa a mesma sintaxe de structs anônimas e literais do Zig.
- Manifesto de pacotes: O
build.zig.zoné o arquivo de configuração central de qualquer projeto Zig. - Tipagem: Diferente de JSON, suporta tipos como enums e multiline strings.
- 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 ZON | Exemplo | Equivalente JSON |
|---|---|---|
| String | "texto" | "texto" |
| Inteiro | 42 | 42 |
| Float | 3.14 | 3.14 |
| Boolean | true / false | true / false |
| Null | null | null |
| Struct | .{ .campo = valor } | { "campo": valor } |
| Array | .{ 1, 2, 3 } | [1, 2, 3] |
| Enum | .nome_valor | N/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
- build.zig.zon — Arquivo principal em formato ZON
- build.zig — Consome dados do build.zig.zon
- zig fetch — Gera hashes para dependências ZON
- Comptime — ZON é avaliado em comptime