Skip to content

Praticar

Os conceitos dos documentos anteriores são condição necessária, não suficiente. Zig, como qualquer linguagem de sistema, só vira fluência quando você escreve código não trivial com ela e lê o código de quem já domina. Este fecho não traz teoria nova; traz o caminho para transformar o que assentou em fluência, e ele tem duas metades que se alimentam: ler muito e construir na medida certa.

A leitura de código real é a forma de aprendizado mais subestimada, e Zig tem a sorte de já ter bases de código exemplares e abertas. O truque é ler com uma pergunta na cabeça, não passar os olhos: como este projeto lida com allocators, onde ele decide arena contra buffer fixo, como ele estrutura os erros.

A biblioteca padrão é a primeira parada, porque você já a usa e agora pode ver como ela é feita: abra ArrayList, HashMap e o std.fmt e veja a maquinaria de comptime que os documentos descreveram, agora em uso real. O compilador de Zig, escrito em Zig, é a mestra-aula de como a linguagem se sustenta, embora seja leitura densa. TigerBeetle, um banco de dados financeiro, é talvez o melhor exemplo de estilo idiomático moderno: alocação estática, asserções por toda parte, um cuidado com desempenho e correção que ensina disciplina. Bun e Ghostty mostram Zig em produção de larga escala, um runtime de JavaScript e um emulador de terminal, com todas as arestas do mundo real. E projetos menores como o compositor Wayland River cabem inteiros na cabeça, o que os torna ótimos para uma primeira leitura de ponta a ponta.

Construir é a outra metade, e o cuidado está em escolher projetos que forcem um conceito de cada vez, subindo em dificuldade. A escada abaixo não é arbitrária: cada degrau exercita uma peça específica da trilha, e os primeiros preparam os últimos.

O chão da escada trabalha memória e allocators. Escrever seu próprio allocator de arena é o exercício que consolida tudo do documento de allocators, porque implementar a interface é entendê-la por dentro. Um string builder e uma hash map próprios vêm em seguida, cada um um vetor dinâmico e uma tabela que recebem allocator e obrigam você a pensar em crescimento, realocação e tempo de vida.

O degrau do meio é território de parsers, onde erros e comptime se encontram. Um parser de JSON e um parser de CSV ensinam a modelar entrada malformada como erro, a decidir entre arena e alocação individual conforme o tempo de vida dos nós, e a lidar com o fluxo de bytes de verdade. São o tamanho ideal para sentir o idioma de try e errdefer sob pressão.

O topo entra em sistemas. Um servidor HTTP mínimo lida com sockets, buffers e concorrência; um banco chave-valor força você a pensar em persistência e em estruturas em disco; e clones simplificados de grep e jq exercitam varredura eficiente de texto e a construção de uma pequena linguagem de consulta. Cada um é um sistema completo em miniatura, com todas as decisões de memória e erro que os anteriores treinaram isoladamente.

Para quem chegou a Zig atrás de motores de consulta e desempenho de memória, o degrau final é um mini banco colunar ao estilo do DuckDB. Ele reúne, num só projeto, tudo o que a trilha construiu: o layout de memória que decide guardar dados por coluna em vez de por linha, os allocators que gerenciam o tempo de vida dos blocos, o SIMD que processa uma coluna muitos valores por vez, o comptime que gera código especializado por tipo de coluna, e o interop com C se você quiser plugá-lo a algo existente. É o projeto que responde, na prática, à pergunta “por que Zig?”.

Vale um aviso sobre o que esse percurso de fato ensina. Boa parte do tempo você não estará estudando Zig, e sim arquitetura de computadores: cache, memória virtual, ABI, syscalls, o custo de um acesso à memória. Zig é o instrumento que torna esses temas concretos, porque não os esconde. Se o seu objetivo é entender sistemas, esse desvio é exatamente o ponto.

Projetos: allocator de arena, string builder, hash map, parser JSON, parser CSV, servidor HTTP, banco chave-valor, clone de grep, clone de jq, banco colunar Código de referência: compilador Zig, biblioteca padrão, TigerBeetle, Bun, Ghostty, River Biblioteca: std.fs, std.io, std.fmt, std.mem, std.math, std.json, std.hash_map, std.array_list Temas de fundo: arquitetura de computadores, cache, memória virtual, ABI, syscalls, formato colunar