Zig est un langage de programmation compilé impératif polyvalent, typé statiquement, conçu par Andrew Kelley. Le langage est conçu pour la «robustesse», l'«optimalité» et la «maintenabilité», prenant en charge les génériques et la réflexion au moment de la compilation, la compilation croisée et la gestion manuelle de la mémoire. Un objectif majeur du langage est de concurrencer (et d'améliorer) C, tout en s'inspirant également de Rust, entre autres.
Zig possède de nombreuses fonctionnalités pour la programmation de bas niveau, notamment des types composés (struct) avec zéro padding, des entiers de taille arbitraire et différents types de pointeurs.
Le compilateur, originellement écrit en C++, a lentement été réécrit en Zig pour être aujourd'hui disponible dans sa version entièrement implémentée en Zig, nommée Stage 2. Il utilise LLVM 11 comme back-end , prenant en charge plusieurs de ses cibles natives, bien que d'autres back-ends soient en développement. Le compilateur est un logiciel libre et open source distribué sous la licence MIT. Le compilateur Zig fournit la possibilité de compiler du C et du C++, similaire à Clang en utilisant respectivement la commande "zig cc" et "zig c++". Le langage de programmation Nim prend en charge l'utilisation de zig cc comme compilateur C.
// zig version 0.7.1
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {}!\n", .{"world"});
}
fn LinkedList(comptime T: type) type {
return struct {
pub const Node = struct {
prev: ?*Node,
next: ?*Node,
data: T,
};
first: ?*Node,
last: ?*Node,
len: usize,
};
}
pub fn main() void {
var node = LinkedList(i32).Node {
prev = null,
next = null,
data = 1234,
};
var list = LinkedList(i32) {
first = &node,
last = &node,
len = 1,
};
}
Le "Zen" de Zig, qui peut être lu sur le site de la fondation Zig, est un ensemble d'idées sur ce qui est important dans le langage Zig.