Ainsi, dans la note de publication de la nouvelle version, la version 0.4.0 de Zig, il écrit que Zig poursuit agressivement son objectif de renverser le C, le langage de facto pour la programmation système. Selon lui, « Zig a l'intention de devenir si pratique que les gens auront à l'utiliser même s'ils ne l'aiment pas ». De plus, pour cette version, il présente un nombre très important d’améliorations, de correctifs de sécurité et de nouvelles fonctionnalités notamment un support pour webAssembly, un support pour FreeBSD et NetBSD, la prise en charge de Linux ARM 64 bits et fonctionne en parallèle avec l’infrastructure de compilation LLVM 8, mais n’est cependant pas compatible avec LLVM 7.
Selon les indications de sa documentation, LLVM est une représentation SSA (Static Single Assignment) qui fournit la sécurité de type, les opérations de bas niveau, la flexibilité et la possibilité de représenter proprement « tous » les langages de haut niveau. C'est la représentation de code commune qui est utilisée à toutes les phases de la stratégie de compilation de LLVM. L’infrastructure de compilation de LLVM prend en charge un large éventail de projets, allant des compilateurs industriels aux applications spécialisées JIT (Just-In-Time) en passant par de petits projets de recherche. Ce fonctionnement en parallèle avec LLVM 8, note-t-il, signifie notamment que Zig prend désormais en charge WebAssembly, ainsi que les systèmes d’exploitation HermitCore et Hurb.
Pour information, HermitCore est un nouveau système d'exploitation unikernel ciblant un comportement d'exécution évolutif et prévisible pour les environnements HPC et cloud. La version actuelle prend en charge C/C++, Fortran, Go, Pthreads, OpenMP et iRCCE en tant que bibliothèque de transmission de messages. En plus d’être la concurrence directe et le prétendant au remplacement du langage C, l’auteur de Zig le décrit également comme étant un compilateur pour le langage C. D’après la présentation d’Andrew, une des principales fonctionnalités de Zig est @cImport et C Translation. Ceci est accompli en reliant les bibliothèques Clang (Clang est un compilateur C et C++ complet). Zig hérite donc de toutes ces fonctionnalités. Voici un exemple de construction de code C par Zig :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | #include <stdio.h> int main(int argc, char **argv) { printf("Hello world\n"); return 0; } $ zig build-exe --c-source hello.c --library c $ ./hello Hello world |
Zig prend en charge ainsi toute la syntaxe des autres types de pointeurs, ainsi que les pointeurs facultatifs. Lorsqu'un pointeur C est implicitement converti en un pointeur non facultatif, un comportement indéfini soumis à une vérification de sécurité se produit si l'adresse est 0. Sur les cibles non autonomes, l'adresse de déréférencement 0 est un comportement non défini vérifié. Les pointeurs C facultatifs introduisent un autre bit pour garder la trace de null. Zig prend en charge la conversion implicite vers et à partir d'entiers, la comparaison avec des nombres entiers, mais ne prend pas en charge les attributs de pointeur Zig-only tels que l'alignement. Il existe d'innombrables autres fonctionnalités apportées par la nouvelle version de Zig qu’Andrew a présenté dans la note de version de Zig 0.4.0 notamment les types d’énumération anonyme, quelques modifications de l’API de la bibliothèque standard et à l’interface d’allocation (std.mem.Allocator). Il note également quelques corrections de bugs.
Dans la communauté du langage, beaucoup se réjouissent des nombreuses fonctionnalités qu’apporte sa nouvelle version (par exemple, LLVM 8, WASM, niveaux de support, pointeurs C, type de vecteur, etc.). « J'aime voir tous les progrès réalisés avec Zig, V, Muon et Rust. Tous ces langages sont des langages systèmes potentiellement meilleurs que le C/C++ avec une meilleure sécurité, de meilleures définitions et une meilleure sémantique. Zig a pour objectif explicite d’être meilleur que le C et de le remplacer et je crois qu’il y arrivera », a déclaré l’un d’eux. D’autres par contre voient la chose autrement.
« Je ne vois aucun langage remplacer le C (ou le C ++), mais ce qui est intéressant ici, c’est que bon nombre de ces langages fonctionnent très bien avec l’ABI C, non seulement en tant que concept FFI, mais aussi avec des notions de mémoire et de présentation des données. L'effet secondaire intéressant pourrait être que nous verrons que Zig ne fonctionne pas uniquement avec du code C mais que Zig fonctionne avec D et Rust. Tout ce code peut toujours être interfacé avec du code C ou C++ (dans les deux sens). Cela réduit considérablement la barrière, mais ne pourra pas égaler le C avant même de le dépasser », a commenté un autre.
Source : ZigLang
Et vous ?
Qu'en pensez-vous ?
Zig va-t-il réussir à remplacer le C et devenir le nouveau standard pour la programmation système, selon vous ? Pourquoi ?
Voir aussi
Dans quel domaine utilisez-vous encore le C ? Quelles en sont les raisons ?
Quel avenir pour le langage C ? Un développeur expérimenté fait ses adieux au langage et livre ses inquiétudes quant à son avenir
Il n'y a rien de mieux que le langage de programmation C pour le développement de systèmes d'exploitation b'après Linus Torvalds