La version 0.4.0 de Zig est disponible
Le langage peut-il vraiment remplacer le C et devenir le nouveau standard pour la programmation système ?

Le , par Bill Fassinou

82PARTAGES

14  0 
Zig est un langage de programmation open source conçu par Andrew Kelley pour garantir les performances telles que la robustesse et la maintenabilité. Andrew a annoncé dans une courte introduction au langage Zig qu’il l’a créé dans le but de concurrencer voire remplacer à l’avenir le redoutable langage C dans le cadre de la programmation système. Ainsi, il dit avoir bâti Zig sur quatre principaux aspects afin qu’il soit un langage de programmation pragmatique, optimal, un coffre-fort en matière de sécurité et un langage le plus lisible possible. « Je ne suis pas si ambitieux et mon objectif est de créer un nouveau langage de programmation qui sera plus pragmatique que le C. C'est comme essayer d'être plus diabolique que le diable lui-même », a écrit Andrew en introduction à la présentation du langage Zig. Lorsqu’il parle de langage plus pragmatique, il fait allusion au fait « que tout ce qui compte à la fin, c’est de savoir si le langage vous a aidé à faire ce que vous tentiez de faire et d’une manière plus simple que les autres langages ».

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
L'un des cas d'utilisation de Zig est de battre C à son propre jeu, ce qui signifie être un meilleur langage pour utiliser les bibliothèques C que C ne l'est. « Le fait que les types de pointeurs non sécurisés de C soient devenus difficiles à utiliser est un effet secondaire malheureux lié à une sécurité accrue dans les types de pointeur. Il est ambigu de savoir si les pointeurs doivent être traduits en pointeurs à élément unique (*T) ou en longueur inconnue ([*]T) », a-t-il écrit. Les pointeurs C sont un compromis pour que le code Zig puisse utiliser directement les fichiers d’en-tête traduits. Ce type doit être évité autant que possible. La seule raison valable pour utiliser un pointeur C réside dans le code généré automatiquement à partir de la traduction du code C.

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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de kmedghaith
Membre averti https://www.developpez.com
Le 09/04/2019 à 20:50
Le langage C est mort depuis longtemps, la preuve : toute les semaines, il y a un nouveau langage pour le remplacer.

Plus sérieusement, le développement logiciel est incrémental, c'est plus facile de réécrire un hello world qu'un système d'exploitation ou un simulateur de je ne sais quel système.
Je ne fais du C que parce que je fais bcp de C++, mais je dirais que ces langages évoluent.
Le C++20 n'a rien à voir avec le C++98, et refaire un langage from scratch parce que C++98 est pourri n'a plus vraiment de sens à mon avis (ceci n'est évidement pas le sujet de cet article mais c'est quand même dans ma même thématique).
4  0 
Avatar de sergio_is_back
Membre chevronné https://www.developpez.com
Le 10/04/2019 à 8:50
Citation Envoyé par kmedghaith Voir le message
Le langage C est mort depuis longtemps, la preuve : toute les semaines, il y a un nouveau langage pour le remplacer.
Oui mais il est toujours bien là !!!

Pas une semaine où l'on ne tente pas réinventer la roue... Mais les idées sortent toujours du même moule, proposent peu ou prou la même syntaxe, la même structuration, les même concepts déjà implémentés ailleurs (parfois en mois bien)... Au point que l'on a parfois du mal à comprendre ce que ça peut faire de mieux... C'est peu être pour ça que les développeurs ont aussi du mal à franchir le pas et ces nouveaux langages ont du mal à émerger...

C'est un peu le nouvel Ariel qui lave plus blanc que blanc...

A près, y'a peu être quelques idées à reprendre en C/C++
1  0 
Avatar de grunk
Modérateur https://www.developpez.com
Le 10/04/2019 à 11:57
Si y'a bien un endroit ou la "hype" à pas sa place c'est dans la prog système.

Entre un langage éprouvé depuis plus de 40 ans et une nouveauté sortie par on ne sait trop qui , le choix va être vite fait. Effectivement ça va sans doute être moins cool à utiliser , mais je suis à peut près certains que ca va être stable si je fait pas n'importe quoi.

On en reparle dans 10 ans quand zig aura fait ses preuves , peut être qu'on pourra effectivement songer à basculer
1  0 

 
Contacter le responsable de la rubrique Programmation

Partenaire : Hébergement Web