Zig (langage) — Wikipédia
Zig | ||
Date de première version | ||
---|---|---|
Paradigme | Fonctionnel, impératif | |
Auteur | Andrew Kelley | |
Développeur | Andrew Kelley, Open Source | |
Dernière version | 0.12.0 (20/04/2024) | |
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 est un langage de programmation compilé impératif polyvalent, typé statiquement, conçu par Andrew Kelley[2],[3]. Le langage est conçu pour la «robustesse», l'«optimalité» et la «maintenabilité»[4],[5], 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[6]. Un objectif majeur du langage est de concurrencer (et d'améliorer) C[7],[8], tout en s'inspirant également de Rust[9],[10], 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[11] et différents types de pointeurs[12].
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[13] comme back-end[14] , prenant en charge plusieurs de ses cibles natives[15], bien que d'autres back-ends soient en développement. Le compilateur est un logiciel libre et open source distribué sous la licence MIT[16]. 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++"[17]. Le langage de programmation Nim prend en charge l'utilisation de zig cc comme compilateur C. [18]
Exemples
[modifier | modifier le code]Hello World
[modifier | modifier le code]// 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
[modifier | modifier le code]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
[modifier | modifier le code]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[19] :
- 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 un compilateur (le seul à ce jour), la communauté Zig n'a pas de concept d'officiel ou non-officiel[20], et tout le monde est libre de créer son site, sa communauté, ses outils Zig, voire un compilateur, qui ne sera pas plus officiel que ceux déjà existants.
Notes et références
[modifier | modifier le code]- « Release 0.13.0 »
- (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 )