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

Zig est un des nouveaux langages qui font la queue pour remplacer le C comme langage de programmation système. Selon ses développeurs, Zig est aussi un langage à usage général qui allie robustesse, réutilisabilité et maintenabilité. Le langage est nouveau et il reste beaucoup de travail avant une version majeure, mais sa version 0.6.0 vient d’être publiée avec de nombreuses fonctionnalités intéressantes. Parmi ces dernières, on peut citer la prise en charge de LLVM 10, de WebAssembly, de Windows, d’ARM, de RISC-V, etc. Voici un aperçu de ce dont il s’agit.

Selon la documentation de Zig, il est robuste en raison du fait qu’il a un comportement correct même pour les cas limites tels que l'absence de mémoire. Il permet d’écrire des programmes optimaux et un code Zig peut fonctionner dans de nombreux environnements qui ont des contraintes différentes. Zig impose un faible surcoût à la lecture du code et résiste à l'évolution des exigences et des environnements. La version 0.6.0 de Zig fonctionne en parallèle avec LLVM et est compatible avec LLVM 10, mais ne prend pas en charge LLVM 9.

Nom : z1.png
Affichages : 4194
Taille : 6,6 Ko

LLVM 10 apporte de nombreux avantages par rapport à la version 9, dont les corrections de bogues, et en particulier pour le support ARM, le support MIPS et le support RISC-V.

Bootstrap Tarball

La version 0.6.0 de Zig est accompagnée d'un nouveau tarball source spécial : zig-bootstrap-0.6.0.tar.xz. Le nouveau Bootstrap Tarball regroupe toutes les dépendances du compilateur Zig, qui comprend LLVM, LLD, et Clang. Le but de l'archive Bootstrap est de commencer avec un minimum de dépendances du système et de terminer avec un compilateur Zig pleinement opérationnel pour n'importe quelle cible. Ceci est fait en 4 étapes.

Prise en charge de Windows

L’équipe de développement de Zig a annoncé avoir considérablement amélioré la prise en charge de Windows par Zig dans cette version. Dans Zig 0.6.0, la version minimale de Windows prise en charge est passée de 7+ à 8.1+, en suivant le cycle de vie étendu du support de Microsoft. En outre, il y a beaucoup plus de support de compilation croisée pour les DLLs du système Windows. wWinMain, wWinMainCRTStartup et DllMain sont désormais des points d'entrée reconnus. On note aussi l’amélioration des informations de débogage et des traces de pile. L’équipe a également annoncé que le piratage visant à désactiver les fonctions CPU natives de Windows est supprimé grâce à des corrections de bogues dans LLVM 10.

Support RISC-V

Le support de RISC-V de Zig a été amélioré. Les informations de débogage et les traces de pile sur RISC-V fonctionnent maintenant. L'ABI par défaut de riscv32-linux et riscv64-linux a été modifié et devient ilp32d et lp64d, respectivement. De même, l'ABI par défaut de riscv32-linux et riscv64-linux non-linux a été modifiée pour devenir ilp32 et lp64. Cela correspond au comportement de Clang. Zig a maintenant une couverture de test pour riscv64 sans libc et riscv64 avec musl libc.

Support ARM

Dans cette version de Zig, aarch64-linux a aussi été grandement amélioré. Tout ce qui manque est que certains tests de comportement sont désactivés. Grâce au Bootstrap Tarball, cette version bénéficie d'un binaire ARM 32 bits disponible (armv7a), ainsi que d'un autre binaire ARM 32 bits légèrement plus ancien (armv6kz) qui fonctionne notamment sur Raspberry Pi 1 et RPi 0. L’équipe a aussi annoncé la correction de la signalisation de certains champs dans la définition des stat ARM. D’autres corrections sont également à noter.

Il y a par exemple la correction du débordement de multiplication dans hash_const_val. Dans certains cas, le compilateur émettait une multiplication signée sur 64 bits, au lieu d'une multiplication non signée sur 32 bits. Voici d’autres changements notables dans cette version de Zig :

  • amélioration des noms des ensembles d'erreurs lors de l'utilisation de l'opérateur de fusion des ensembles d'erreurs (||) ;
  • la syntaxe du pub pour les champs de conteneurs est supprimée ;
  • asm accepte maintenant les valeurs connues de comptime plutôt que d'exiger une syntaxe littérale de chaîne de caractères ;
  • suppression de l'erreur de compilation pour le résultat du pair ?comptime_int et null ;
  • possibilité de passer les types de temps de travail et les autres types de temps de travail au même paramètre ;
  • @typeOf est renommé en @TypeOf. zig fmt effectue automatiquement la conversion, et la prochaine version de Zig après celle-ci supprimera la conversion automatique ;
  • possibilité d'activer les types de pointeurs ;
  • les chaînes multilignes dans les noms de tests et de bibliothèques sont interdites ;
  • @ptrCast permet de lancer une tranche vers un pointeur ;
  • il existe maintenant une résolution de type pair entre les constantes mixtes []T et *[N]T.
  • etc.

Source : Zig 0.6.0

Et vous ?

Qu'en pensez-vous ?

Voir aussi

Quels sont les meilleurs langages de programmation à apprendre en 2020 ? Voici un classement de ces langages selon le cas d'utilisation

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

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

Rust : découvrez Wasm-bindgen, pour faciliter l'interaction entre les modules Wasm et JavaScript par Anthony Defranceschi