Checklist de Code Review para Zig
Code review em Zig tem aspectos únicos: gerenciamento manual de memória, error unions, comptime e allocators explícitos exigem atenção especial. Este checklist cobre os pontos mais importantes.
1. Gerenciamento de Memória
// VERIFICAR: todo alloc tem um free correspondente?
const dados = try allocator.alloc(u8, 1024);
defer allocator.free(dados); // OK
// VERIFICAR: errdefer para limpeza em caso de erro?
const buffer = try allocator.alloc(u8, 4096);
errdefer allocator.free(buffer); // Limpa se o restante falhar
const resultado = try processarBuffer(buffer);
Perguntas:
- Todo
alloctemdefer freeouerrdefer free? - Structs com
init()temdeinit()? errdeferestá sendo usado para limpeza de recursos?- O allocator correto está sendo usado?
2. Tratamento de Erros
// RUIM: ignorar erro
_ = funcao() catch {};
// BOM: tratar ou logar
funcao() catch |err| {
std.log.err("Falha em funcao: {}", .{err});
return err;
};
// VERIFICAR: try está propagando corretamente?
pub fn processo() !void {
try passo1();
try passo2(); // Se falhar, errdfer de passo1 executa?
try passo3();
}
3. Performance
// VERIFICAR: alocações desnecessárias no hot path?
for (items) |item| {
// RUIM: aloca em cada iteração
const temp = try allocator.alloc(u8, item.len);
defer allocator.free(temp);
}
// BOM: reutilizar buffer
var buffer = std.ArrayList(u8).init(allocator);
defer buffer.deinit();
for (items) |item| {
buffer.clearRetainingCapacity();
try buffer.appendSlice(item);
}
4. Estilo e Legibilidade
zig fmtfoi executado?- Nomes de variáveis em português ou inglês consistente?
- Funções têm docstrings?
- Constantes nomeadas em vez de magic numbers?
5. Testes
- Testes unitários para a lógica nova?
- Edge cases testados (empty slice, null, overflow)?
std.testing.allocatorusado nos testes (detecta leaks)?
6. Segurança
- Sem dados sensíveis em logs?
- Input externo validado antes de usar?
- Buffer sizes verificados antes de cópia?
- Sem
@ptrCastdesnecessário?
Conclusão
Code review em Zig foca em memória, erros e performance. A checklist acima cobre os erros mais comuns e pode ser adaptada para as necessidades do seu time.
Conteúdo Relacionado
- Clean Code em Zig — Princípios de clean code
- Error Handling — Boas práticas de erros
- Alocação de Memória — Estratégias de memória
- Testes Avançados — Série de testes
- Ferramentas de Desenvolvimento — Tooling