Hoje vamos iniciar também uma série sobre a linguagem de progração: Zig. Trata-se de conteúdos que fui criando ao longo de um tempo e decidi transformar em postagens por fins de registro das coisas que eu fiz. Lógico, que existem inúmeras maneiras de se aprender Zig, mas aqui com pequenas doses semanais fica mais divertido!
Nesse artigo veremos:
Zig é uma linguagem de programação de baixo nível, focada em desempenho, segurança e controle explícito do desenvolvedor sobre o sistema. É uma alternativa moderna ao C, com compilação cruzada embutida, ausência de hidden control flow e sem coleta de lixo, utiliza LLVM/C++ como backend para o compilador.
Criada por Andrew Kelley em 2015, o desenvolvimento do Zig começou como resposta às limitações do C e C++, buscando uma linguagem mais segura e previsível para sistemas e ferramentas. A linguagem cresceu com apoio da comunidade, com forte ênfase em interoperabilidade com C e uso no ecossistema LLVM.
glibc
, facilitando builds estáticos.make
, cmake
e scripts bash como sistema de build.Detalhes Técnicos:
try
e catch
, sem exceções ocultas.zig build-exe --target
.Zig não possui macros nem metaprogramação, mas ainda assim é poderoso o suficiente para expressar programas complexos de uma forma clara e não repetitiva.
Zig é ideal para quem quer controle absoluto do hardware, sem abrir mão de segurança e modernidade.
Software desenvolvido em Zig
Mais sobre Zig:
Para instalar o Zig no seu sistema operacional, você pode(e deve) fazer download direto do site: https://ziglang.org/download/ de acordo com seu sistema.
x86_64
(não utilize a branch master e sim a útima versão):
.zip
da versão Stable ou Master para Windows.C:\zig
).C:\zig
à variável de ambiente PATH
:Win + S
→ “Variáveis de ambiente”C:\zig
zig version
Você também pode tentar com gerenciadores de pacotes(não recomendado):
choco install zig # Utilizando Chocolatey
scoop install zig # Utilizando o Scoop
pacman -S mingw-w64-x86_64-zig # Utilizando o msys2
x86_64
(não utilize a branch master e sim a útima versão):wget -q https://ziglang.org/builds/zig-linux-x86_64-*.tar.xz
tar Jxvf zig-linux-x86_64-*.tar.xz
mkdir -p ~/.local/bin
mv zig-linux-x86_64-*/ ~/.local/bin/zig
echo 'export PATH="${PATH}:${HOME}/.local/bin/zig"' >> ~/.bashrc
source ~/.bashrc
zig version
brew install zig # Utilizando o Homwbrew
port install zig # Utilizando o MacPorts
Para desenvolvimento utilize qualquer editor de códigos, aquele que você melhor se adapta, dentre eles:
Aqui há uma lista que apesar de o tópico apontar C++, quese todos servem para Zig:
const std = @import("std");
pub fn main() void {
std.debug.print("Olá, {s}!\n", .{"Zig"});
}
// Compilar e Rodar: zig run main.zig
// Compilar: zig build-exe main.zig
// Rodar: ./main
Ou
const print = @import("std").debug.print;
pub fn main() void {
print("Hello, world!\n", .{});
}
Compile: zig build-exe main.zig && mv main a.out && rm main.o
Ou ainda:
const print = @import("std").debug.print;
pub fn main() void {
const hello: []const u8 = "Olá, Zig!⚡";
print("{s}\n", .{hello});
}
Linha a linha do código Zig:
const std = @import("std");
std
.@import
é uma builtin usada para incluir módulos.pub fn main() void {
main
, ponto de entrada do programa.pub
torna a função pública (necessário para que o linker a encontre).void
indica que a função não retorna valor.std.debug.print("Olá, {s}!\n", .{"Zig"});
print
do módulo debug
da biblioteca padrão."Olá, {s}!\n"
é o format string. {s}
será substituído por uma string..{"Zig"}
é um tuple literal com o valor a ser inserido no {s}
.\n
quebra a linha.É um equivalente direto a printf("Olá, %s!\n", "Zig");
em C.