Seguindo a filosofia de aprender em público, que menciono no about do blog, este post inicia uma série relacionada à linguagem de programação Zig.

De início, não pretendo fazer posts longos ou tutoriais completos. Registrarei pequenos passos (com ritmo consistente, assim espero) do aprendizado de uma nova linguagem para mim. Aqui e acolá, procurarei fazer 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
  • um 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 (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 até 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 contém algoritmos, estruturas de dados e definições para ajudar a criar 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.

const std = @import("std");

pub fn main() void {
	const user = User{
		.power = 9001,
		.name = "Goku",
	};

	std.debug.print("{s}'s power is {d}\n", .{user.name, user.power});
}

pub const User = struct {
	power: u64,
	name: []const u8,
};

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.