Seguindo a filosofia de aprender em público, que mencionei na seção about do blog, este post dá início a uma série sobre a linguagem de programação Zig.
De início, não pretendo fazer posts longos ou tutoriais completos. Registrarei pequenos passos (com um ritmo consistente, espero) no aprendizado dessa nova linguagem para mim. Aqui e ali, farei paralelos com outras que já me são familiares, como C e Rust.
Características da linguagem
Segundo sua própria documentação, Zig é, ao mesmo tempo:
- uma linguagem de programação de propósito geral;
- uma toolchain para a manutenção de software robusto, otimizado e reutilizável
Ela é fortemente tipada e compilada. Tem suporte a generics, meta-programação em tempo de compilação (falaremos mais sobre isso em posts futuros) e não possui garbage collector.
A linguagem promete um código-fonte de fácil leitura, que se comunica de forma precisa com o compilador e com os programadores. O mesmo código funciona em vários ambientes com diferentes restrições e se comporta corretamente, mesmo em situações extremas, como falta de memória.
A biblioteca padrão
A biblioteca padrão de Zig tem uma documentação própria. Ela inclui algoritmos, estruturas de dados e definições para ajudar na criação de programas ou outras bibliotecas.
Um primeiro exemplo
O exemplo abaixo foi retirado do ótimo site Learning Zig. Os detalhes de cada linha são explicados no post original e não irei me estender sobre eles por enquanto. O objetivo é mostrar a “cara” da linguagem.
1const std = @import("std");
2
3pub fn main() void {
4 const user = User{
5 .power = 9001,
6 .name = "Goku",
7 };
8
9 std.debug.print("{s}'s power is {d}\n", .{user.name, user.power});
10}
11
12pub const User = struct {
13 power: u64,
14 name: []const u8,
15};
Se salvar o código acima em um arquivo de nome ssj.zig
e executar zig run ssj.zig
, você irá obter o seguinte resultado na linha de comando: Goku's power is 9001
.
Fontes de recursos para estudo
Comecei a estudar pelos dois últimos e estou gostando bastante. Ziglings são exercícios que permitem aprender a linguagem resolvendo pequenos problemas em programas. Parece ser bastante inspirado no Rustlings (de Rust, como você poderia imaginar) e é um recurso muito bem estruturado.
É isso! Fizemos uma breve apresentação de Zig.