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 l'allocation de mémoire manuelle (cad. sans ramasse-miette)[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
Logo.

Date de première version 2015Voir et modifier les données sur Wikidata
Paradigme Multi-paradigmes, Fonctionnel, Impératif, Concurrent, Procédurale
Auteur Andrew Kelley
Développeur Andrew Kelley, Open Source
Dernière version 0.16.0 (13/04/2026)
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[11] et différents types de pointeurs[12].

Le compilateur, originellement écrit en C++, a lentement été entièrement réécrit en Zig. Il utilise LLVM 21 comme back-end[13] , prenant en charge plusieurs de ses cibles natives[14], bien que d'autres back-ends soient en développement notamment le back-end x86 qui est disponible depuis la version 0.14[15]. 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

Hello World

modifier
const std = @import("std");

pub fn main() void {
    std.debug.print("Hello, World!\n", .{});
}

QuickSort avec choix de la fonction de comparaison

modifier
const std = @import("std");

pub fn quickSort(comptime T: type, arr: []T, comptime compareFn: fn (T, T) bool) void {
    if (arr.len < 2) return;

    const pivot_index = partition(T, arr, compareFn);
    quickSort(T, arr[0..pivot_index], compareFn);
    quickSort(T, arr[pivot_index + 1 .. arr.len], compareFn);
}

fn partition(comptime T: type, arr: []T, comptime compareFn: fn (T, T) bool) usize {
    const pivot_index = arr.len / 2;
    const last_index = arr.len - 1;

    std.mem.swap(T, &arr[pivot_index], &arr[last_index]);

    var store_index: usize = 0;
    for (arr[0 .. arr.len - 1]) |*elem_ptr| {
        if (compareFn(elem_ptr.*, arr[last_index])) {
            std.mem.swap(T, elem_ptr, &arr[store_index]);
            store_index += 1;
        }
    }

    std.mem.swap(T, &arr[store_index], &arr[last_index]);
    return store_index;
}

pub fn main() void {
    const print = std.debug.print;

    var arr = [_]i16{ 4, 65, 2, -31, 0, 99, 2, 83, 782, 1 };
    print("Before: {any}\n\n", .{arr});

    print("Sort numbers in ascending order.\n", .{});
    quickSort(i16, &arr, struct {
        fn sortFn(left: i16, right: i16) bool {
            return left < right;
        }
    }.sortFn);
    print("After: {any}\n\n", .{arr});

    print("Sort numbers in descending order.\n", .{});
    quickSort(i16, &arr, struct {
        fn sortFn(left: i16, right: i16) bool {
            return left > right;
        }
    }.sortFn);
    print("After: {any}\n\n", .{arr});
}

[19]

Philosophie

modifier

Le « Zen » de Zig, qui peut être lu sur le site de la fondation Zig, est un ensemble d'idées importantes dans le langage [20] :

  • 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 évidente 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[21], 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.

Le développement de la spécification du langage Zig se fait dans un modèle que ses développeurs appellent BDFN pour « Benevolent Dictator For Now »[22], c'est-à-dire « Dictateur bienveillant pour le moment », qui est une variante du modèle « Benevolent Dictator For Life » utilisé par de nombreux projets open-source. Cela signifie qu'Andrew Kelley a le dernier mot sur les fonctionnalités ajoutées ou non au langage et n'est pas tenu à respecter l'avis des utilisateurs ou des développeurs, mais ce de manière temporaire.

Notes et références

modifier
  1. « 0.16.0 Released », 14 avril 2026 (consulté le 14 avril 2026)
  2. (en-US) « Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot », JAXenter, 31 octobre 2017 (consulté le 11 février 2020)
  3. (en-US) « Tired of C? New programming language Zig aims to be more pragmatic and readable », 19 octobre 2017 (consulté le 22 avril 2020)
  4. (en) Yegulalp, « New challenger joins Rust to topple C language », InfoWorld, 29 août 2016 (consulté le 11 février 2020)
  5. (en-US) « Zig language and C », Sina Corp, 12 juillet 2020 (consulté le 12 août 2020)
  6. (en-US) « The Zig Programming Language », ziglang.org (consulté le 11 février 2020)
  7. (en-US) « Mozilla's Observatory, the Zig programming language, and uSens' VR/AR SDK—SD Times news digest: Aug. 29, 2016 », SD Times, 29 août 2016 (consulté le 11 février 2020)
  8. (en-US) « The Zig Programming Language », ziglang.org (consulté le 11 février 2020)
  9. (en) Company, « Sudo Null - IT News for you », SudoNull (consulté le 11 février 2020)
  10. (en-US) Kelley, « Unsafe Zig is Safer Than Unsafe Rust », andrewkelley.me (consulté le 11 février 2020)
  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 24 avril 2020)
  12. (en-US) « Documentation - The Zig Programming Language », ziglang.org (consulté le 24 avril 2020)
  13. « 0.14.0 Release Notes ⚡ The Zig Programming Language », sur ziglang.org (consulté le 6 mars 2025)
  14. (en-US) « The Zig Programming Language », ziglang.org (consulté le 11 février 2020)
  15. « 0.14.0 Release Notes ⚡ The Zig Programming Language », sur ziglang.org (consulté le 6 mars 2025)
  16. (en) « ziglang/zig », GitHub (consulté le 11 février 2020)
  17. (en-US) « 0.6.0 Release Notes · The Zig Programming Language », ziglang.org (consulté le 19 avril 2020)
  18. (en) « Add support for 'zig cc' as C compiler. by hessammehr · Pull Request #13757 · nim-lang/Nim », GitHub (consulté le 19 avril 2020).
  19. https://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Zig
  20. « Documentation - The Zig Programming Language », sur ziglang.org (consulté le 1er décembre 2022).
  21. (en) « Community · ziglang/zig Wiki », sur GitHub (consulté le 1er décembre 2022)
  22. ziglang/zig, Zig Programming Language, 7 avril 2025 (lire en ligne)

Voir également

modifier

Articles connexes

modifier

Liens externes

modifier

📚 Artikel Terkait di Wikipedia

Modulo (opération)

Consortium, 19 avril 2022, § 4.3.2 Integer Operations « Zig Documentation », sur Zig Programming Language (consulté le 18 décembre 2022) "Why does -22 // 10

Rust (langage)

« RustBelt: securing the foundations of the Rust programming language », Proceedings of the ACM on Programming Languages, vol. 2, no POPL,‎ 27 décembre 2017, p

Liste de langages de programmation

(programming language) (en) Accent ActForex Distributed Application Specification Language (DASL) (en) ACT-III Ada Adenine Afnix Agora (programming language) (en)

Langage de programmation à usage général

langage de programmation à usage général (en anglais : general-purpose programming language) est un langage de programmation conçu pour être utilisé pour la

Structures en langage C

structures and unions » (en) « Structs, Unions », sur dlang.org (en) « Types · The Julia Language » (en) « Structs | zig.guide » Portail de l’informatique

Mojo (langage de programmation)

ligne) « Mojo🔥 programming manual », docs.modular.com, Modular,‎ 2023 (consulté le 26 septembre 2023) : « Mojo is a programming language that is as easy

Epoch

« The Gregorian calendar » M. F. Cowlishaw, The Rexx Language : A Practical Approach to Programming, Prentice Hall, 1990, 2nd éd., 203 p. (ISBN 0-13-780651-5)

Microsoft Robotics Developer Studio

application MSR comportent un environnement graphique (Microsoft Visual Programming Language : VPL), des outils en ligne de commande permettant de générer et