Zig est un langage de programmation compilé impératif polyvalent, typé statiquement, conçu par Andrew Kelley[1],[2]. Le langage est conçu pour la «robustesse», l'«optimalité» et la «maintenabilité»[3],[4], 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[5] . Un objectif majeur du langage est de concurrencer (et d'améliorer) C[6],[7], tout en s'inspirant également de Rust[8],[9], entre autres.
Pour les articles homonymes, voir Zig.
Zig | ||
![]() | ||
Date de première version | ![]() |
|
---|---|---|
Paradigme | Fonctionnel, impératif | |
Auteur | Andrew Kelley | |
Développeur | Andrew Kelley, Open Source | |
Dernière version | 0.7.1 (13/12/2020) | |
Typage | Fort, statique | |
Influencé par | C, C++, LLVM IR, Go, Rust, JavaScript | |
Écrit en | C++, Zig | |
Systèmes d'exploitation | Multiplateforme | |
Licence | Licence MIT | |
Site web | https://ziglang.org/ | |
Extensions de fichiers | .zig | |
modifier ![]() |
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[10] et différents types de pointeurs.[11]
Le compilateur est écrit en Zig et C++, utilisant LLVM 11[12] comme back-end[13] , prenant en charge plusieurs de ses cibles natives.[14] Le compilateur est un logiciel libre et open source distribué sous la licence MIT[15] . 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++"[16]. Le langage de programmation Nim prend en charge l'utilisation de zig cc comme compilateur C. [17]
// 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,
};
}