Zig (langage) — Wikipédia

Zig
Logo.

Date de première version Voir et modifier les données sur Wikidata
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

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]

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"}); } 
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]
  1. « Release 0.13.0 »
  2. (en-US) « Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot », JAXenter, (consulté le )
  3. (en-US) « Tired of C? New programming language Zig aims to be more pragmatic and readable », (consulté le )
  4. (en) Yegulalp, « New challenger joins Rust to topple C language », InfoWorld, (consulté le )
  5. (en-US) « Zig language and C », Sina Corp, (consulté le )
  6. (en-US) « The Zig Programming Language », ziglang.org (consulté le )
  7. (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 )
  8. (en-US) « The Zig Programming Language », ziglang.org (consulté le )
  9. (en) Company, « Sudo Null - IT News for you », SudoNull (consulté le )
  10. (en-US) Kelley, « Unsafe Zig is Safer Than Unsafe Rust », andrewkelley.me (consulté le )
  11. (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 )
  12. (en-US) « Documentation - The Zig Programming Language », ziglang.org (consulté le )
  13. (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 )
  14. (en-GB) « A Reply to The Road to Zig 1.0 », www.gingerbill.org, (consulté le )
  15. (en-US) « The Zig Programming Language », ziglang.org (consulté le )
  16. (en) « ziglang/zig », GitHub (consulté le )
  17. (en-US) « 0.6.0 Release Notes · The Zig Programming Language », ziglang.org (consulté le )
  18. (en) « Add support for 'zig cc' as C compiler. by hessammehr · Pull Request #13757 · nim-lang/Nim », GitHub (consulté le )
  19. « Documentation - The Zig Programming Language », sur ziglang.org (consulté le )
  20. (en) « Community · ziglang/zig Wiki », sur GitHub (consulté le )

Voir également

[modifier | modifier le code]

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]