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.
Ler código de quem sabe
Section titled “Ler código de quem sabe”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.
A escada de projetos
Section titled “A escada de projetos”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.
O alvo, se o seu norte é dados
Section titled “O alvo, se o seu norte é dados”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.
Palavras-chave
Section titled “Palavras-chave”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