Zig (langage)
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.
Zig | ||
Date de première version | ||
---|---|---|
Paradigme | Fonctionnel, impératif | |
Auteur | Andrew Kelley | |
Développeur | Andrew Kelley, Open Source | |
Dernière version | 0.10.0 (31/10/2022) | |
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 | |
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, 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[12] comme back-end[13] , prenant en charge plusieurs de ses cibles natives[14], bien que d'autres back-ends soient en développement. 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]
Exemples
Hello World
// 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"});
}
Liste chaînée générique
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,
};
}
Philosophie
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. Dans leurs mots[18] :
- Communiquer les intentions précisément
- Les cas spéciaux ou rares sont importants
- Favoriser la lecture du code par dessus l'écriture
- Une seule manière d'écrire les choses
- Les crash à l'exécution sont meilleurs que les bugs
- Les erreurs à la compilation sont meilleures que les crashs
- Améliorations incrémentales
- Éviter les maxima locaux
- Réduire ce qu'on doit retenir
- Se concentrer sur le code plutôt que sur le style
- L'allocation de ressources peut échouer, la libération doit réussir
- La mémoire est une ressource
- Ensemble nous servons l'utilisateur
Bien que la Fondation Zig existe, avec son site web, et propose le compilateur par défaut (unique à ce jour), la communauté Zig n'a pas de concept d'officiel ou non-officiel[19], et tout le monde est libre de créer son site, sa communauté, ses outils Zig, voire un compilateur, qui ne sera pas plus officiels que ceux déjà existants.
Notes et références
- (en-US) « Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot », JAXenter, (consulté le )
- (en-US) « Tired of C? New programming language Zig aims to be more pragmatic and readable », (consulté le )
- (en) Yegulalp, « New challenger joins Rust to topple C language », InfoWorld, (consulté le )
- (en-US) « Zig language and C », Sina Corp, (consulté le )
- (en-US) « The Zig Programming Language », ziglang.org (consulté le )
- (en-US) « Mozilla's Observatory, the Zig programming language, and uSens' VR/AR SDK—SD Times news digest: Aug. 29, 2016 », SD Times, (consulté le )
- (en-US) « The Zig Programming Language », ziglang.org (consulté le )
- (en) Company, « Sudo Null - IT News for you », SudoNull (consulté le )
- (en-US) Kelley, « Unsafe Zig is Safer Than Unsafe Rust », andrewkelley.me (consulté le )
- (en) Tim Anderson 24 Apr 2020 at 09:50, « Keen to go _ExtInt? LLVM Clang compiler adds support for custom width integers », www.theregister.co.uk (consulté le )
- (en-US) « Documentation - The Zig Programming Language », ziglang.org (consulté le )
- (en-US) « SD Times news digest: C++20 concepts in Visual Studio 2010 version 16.3, Bootstrap to drop IE support, and Zig 0.60 released », SD Times, (consulté le )
- (en-GB) « A Reply to The Road to Zig 1.0 », www.gingerbill.org, (consulté le )
- (en-US) « The Zig Programming Language », ziglang.org (consulté le )
- (en) « ziglang/zig », GitHub (consulté le )
- (en-US) « 0.6.0 Release Notes · The Zig Programming Language », ziglang.org (consulté le )
- (en) « Add support for 'zig cc' as C compiler. by hessammehr · Pull Request #13757 · nim-lang/Nim », GitHub (consulté le )
- « Documentation - The Zig Programming Language », sur ziglang.org (consulté le )
- (en) « Community · ziglang/zig Wiki », sur GitHub (consulté le )