IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La version 0.9.0 de ZIG, le langage de programmation compilé, inspiré de Rust et conçu pour concurrencer le C, est disponible,
Avec une amélioration de l'interface mem.Allocator et bien plus

Le , par Bruno

121PARTAGES

10  0 
La Zig Software Fondation, organisme en charge du langage ZIG, a annoncé le 22 décembre la disponibilité de la version 0.9 du langage de programmation ZIG. L’objectif du langage inspiré de Rust, selon ses concepteurs, reste de concurrencer (et d'améliorer) le langage C. Cette nouvelle version apporte une amélioration de l'interface mem.Allocator, une correction des caractéristiques CPU de l'assemblage RISC-V. Cependant, certains pensent que Zig pourrait facilement récupérer la plupart de ces optimisations s'il existait une sorte de membres immuables.

Conçu par Andrew Kelley, Zig est un langage de programmation compilé impératif polyvalent, typé statiquement. Selon la documentation de Zig, le langage est conçu pour la « robustesse », l'« optimalité » et la « maintenabilité », 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. 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 et différents types de pointeurs.


Le compilateur est écrit en Zig et C++, utilisant LLVM 11 comme back-end, prenant en charge plusieurs de ses cibles natives. Le compilateur est un logiciel libre et open source, distribué sous la licence MIT. 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++. Le langage de programmation Nim prend en charge l'utilisation de zig cc comme compilateur C.

WebAssembly

« Avec la version 0.9.0, nous avons franchi quelques étapes importantes. Le linker autonome pour wasm a été réécrit, avec les connaissances acquises lors de la construction d'un linker autonome pour wasm », indique la Zig Software Fondation. En effet, le linker est maintenant capable de construire une disposition de la mémoire avec une pile virtuelle, ainsi que d'effectuer des relocations. Ce sont là quelques-unes des fonctionnalités nécessaires à l'implémentation de zig test.

À ce jour, le backend wasm auto-hébergé est maintenant capable de passer 13 % de tous les tests comportementaux. Avec tous ces changements, la contribution au backend wasm est beaucoup plus facile. L'éditeur de liens est maintenant suffisamment performant pour que seule une connaissance de wasm soit nécessaire pour contribuer au backend.

RISC-V

Correction des caractéristiques CPU de l'assemblage RISC-V. Auparavant, Zig ne communiquait pas correctement les caractéristiques du CPU pour RISC-V à l'assembleur Clang, car Clang a une manière différente de transmettre les caractéristiques du CPU pour le code C et pour le code assembleur. Ce commit fait passer à Zig un tag RISC-V -march afin de communiquer les caractéristiques du CPU à Clang lors de la compilation des fichiers d'assemblage.

Allocgate

L'interface mem.Allocator a été modifiée dans la version 0.9.0 de ZIG. Pour modifier le code, La Zig Software Fondation recommande de :

  • changez *Allocator en Allocator dans les types de paramètres de fonctions et les types de champs de structures ;
  • au lieu de prendre le pointeur vers un champ allocateur, tel que &gpa.allocator, il serait mieux d’utiliser un appel de fonction comme ceci : gpa.allocator().

L'interface rand.Random a été modifiée de manière équivalente aux modifications de l'interface Allocator, tous motivées par la recherche des performances.

Zig aurait utilisé le pointeur vtable à l'intérieur de l'objet pour la bibliothèque standard, mais cette approche semblait lente car le compilateur n'était pas en mesure d'effectuer de nombreuses optimisations possibles en C++. « La propriété la plus cruciale qui bénéficie de la conception du C++ est que le pointeur vtable ne peut pas changer pendant toute la durée de vie de l'objet, même si l'objet est transmis par pointeur/référence à une fonction externe », « Chers tous, l'annonce de l'allocgate m'a fait réfléchir. Il y a généralement deux façons d'implémenter le polymorphisme d'exécution par le biais des vtables : le pointeur vers la vtable à l'intérieur de l'objet, et le pointeur vers la vtable à côté du pointeur vers l'objet (fat pointer). Le premier est utilisé par le C++, tandis que le second est utilisé par Rust. », ajoute-t-il.

Notons qu’un objet immuable, en programmation orientée objet et fonctionnelle, est un objet dont l'état ne peut pas être modifié après sa création. Ce concept est à contraster avec celui d'objet variable. Avant l'apparition de la programmation orientée objet, les variables d'exécution dont le contenu n'était pas destiné à changer en cours d'exécution (par exemple, le facteur de conversion permettant de transformer des livres en kilogrammes, ou encore la valeur de pi avec plusieurs décimales) étaient connues sous le nom de constantes, pour les différencier de celles qui pouvaient être modifiées.

Dans la plupart des langages orientés objet, les objets sont manipulés par des références. C'est le cas, par exemple, de Java, des objets de type class de C# et de Swift (contrairement aux objets de type struct), de Python, de JavaScript et de Ruby. Dans ce cas, le fait que l'état d'un objet partagé par référence puisse ou non être modifié est important.

Lorsqu'un objet est réputé immuable, on peut en obtenir une copie en dupliquant simplement sa référence, au lieu de copier l'objet entier. Comme une référence (qui n'occupe typiquement en mémoire que la taille d'un pointeur) est habituellement bien moins volumineuse que l'objet lui-même, cette technique permet à la fois d'économiser de la mémoire et d'améliorer la vitesse d'exécution.

Système de construction Zig

Le système de construction Zig est invoqué par la commande zig build, qui exécute un script déclaratif build.zig pour collecter les options et décrire le graphe des étapes, puis fournit des options pour exécuter ces étapes. Bien qu'il soit déjà essentiel à presque tous les projets Zig, le système de construction Zig est encore expérimental et instable. En tant que système de compilation, la stabilité est particulièrement importante, mais elle ne peut être atteinte tant que le langage n'est pas stabilisé. La stabilité du langage est le prochain point d'attention de la feuille de route.

Pour certains programmeurs, « Zig pourrait facilement récupérer la plupart de ces optimisations s'il existait une sorte de membres immuables (les membres d'un objet qui ne peuvent pas changer après sa création). » Si le pointeur de la vtable n'a pas changé depuis sa création (et pointe vers une vtable const), alors le compilateur devrait être capable de dévirtualiser les appels, même si l'objet peut changer, car il connaît la valeur de la vtable, estiment ces derniers. « Je ne dis pas que nous devrions revenir au fat pointer, mais j'aimerais être capable d'implémenter le polymorphisme d'exécution dans les deux sens de manière efficace. »

Zig peut-il concurrencer le langage C ?

Le langage C a toujours été un langage à feuilles persistantes et a joué un rôle prépondérant dans la plupart des développements de systèmes qui ont eu lieu au cours des dernières décennies. La programmation C a été développée à l'origine par Dennis Ritchie entre 1969 et 1973 aux Bell Labs et a été conçue pour la programmation informatique impérative à usage général, qui supporte la programmation structurée, les variables lexicales, la portée, la récursion, etc. Aujourd'hui, il existe une multitude de langages de programmation à choisir et à apprendre, mais en tant que débutant, tout le monde se pose la question « Quel langage de programmation dois-je apprendre en premier ? » et la plupart des réponses que nous obtenons sur Internet ou par le biais de suggestions sont "C".

Flexibilité

En tant que langage de niveau intermédiaire, le C combine les caractéristiques des langages de haut niveau et de bas niveau. Il peut être utilisé pour la programmation de bas niveau, comme les scripts pour les pilotes et les noyaux, et il supporte également les fonctions des langages de programmation de haut niveau, comme les scripts pour les applications logicielles, etc.
Le noyau Windows de Microsoft est développé principalement en C, avec quelques parties de langage d'assemblage. Le noyau de Linux est également écrit en C. Chaque pilote et programme de Mac fonctionne sur un noyau en C. Les noyaux d'iOS, d'Android et de Windows Phone sont également écrits en C.

Compatibilité

Diverses caractéristiques du langage C, notamment l'accès direct aux API matérielles au niveau de la machine, la présence de compilateurs C, l'utilisation déterministe des ressources et l'allocation dynamique de la mémoire font du langage C un choix optimal pour les applications de script et les pilotes des systèmes embarqués. La plupart des systèmes embarqués comme un réveil, les télécommandes seraient programmés en C. Les bases de données les plus populaires au monde, notamment Oracle, MYSQL, MS SQL server, sont codées en C (avec C++).

Portabilité

Le C est un langage hautement portable. C'est un langage indépendant du matériel ou de la plateforme. Il est utilisé pour les scripts d'applications système qui constituent une part importante des systèmes d'exploitation Windows, UNIX et Linux.

Source : Zig

Et vous ?

Quel est votre avis sur le langage Zig ?

Que pensez-vous des améliorations apportées ?

Pensez-vous que ce langage peut concurrencer le langage C ?

Quel serait à votre avis l'aspect à améliorer sur Zig ?

Selon vous, les membres immuables « résoudraient-ils » l'Allocgate dans Zig ?

Voir aussi :

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 ?

Zig 0.6.0 est disponible, le langage de programmation polyvalent prend en charge LLVM 10, WebAssembly, Windows et bien d'autres

Quel langage pourrait remplacer C ?Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D

Quels sont les meilleurs langages de programmation pour développer une application mobile ? Petit tour d'horizon sur les plus populaires

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

Avatar de Fagus
Membre expert https://www.developpez.com
Le 29/12/2021 à 21:26
Tout est possible en C++ ... , ce qui n'a pas découragé la création de Go, Swift, Rust... avec leurs surspécialités.
Apparemment Zig se veut être une sorte de C, avec moins de "footguns" (avec moins de pièges par conception). Il y a sans doute une niche pour l'embarqué et pour les gens qui trouvent Rust ou c++ trop complexe. ça a l'air intéressant, mais c'est en pré 1.0. Zig se veut aussi nativement compatible avec C de manière transparente, ce qui est un atout.

Il y a un résumé court des qualités supposées de zig sur hack a day avec un exemple de mauvais code c++ qui compile et d'équivalent Zig qui ne compile pas. Apparemment le compilateur empêche certaines écritures "unsafe" sans être trop trop verbeux...
2  0 
Avatar de Jamatronic
Membre éprouvé https://www.developpez.com
Le 26/12/2021 à 16:37
A ce jour le meilleur concurrent de C est... C++. Et vu la religion que C++ est devenu, les autres peuvent bien s'agiter autant qu'ils veulent...
0  0