Zig, un langage de programmation à usage général qui interagit avec les programmes C/C++ et est présenté comme une alternative moderne au C, a fait son apparition dans l'indice Tiobe de popularité des langages de programmation.
Zig est entré dans le top 50 de l'édition d'avril du Tiobe Programming Community Index, se classant 46e, mais avec une note de seulement 0,19 %. En revanche, le langage Carbon promu par Google, positionné comme un successeur expérimental du C++, n'est classé qu'à la 168e place.
Tiobe a décrit Zig comme ayant des fonctionnalités de C et C ++ telles que la gestion explicite de la mémoire améliorée avec des types d'options, tout en abandonnant d'autres fonctionnalités telles que le prétraitement. Bien que l'entrée dans le top 50 ne soit pas une garantie de succès, c'est une première étape remarquable, a déclaré Tiobe.
Selon Tiobe, la demande de langages hautes performances capables de traiter de grandes quantités de données a entraîné la montée en puissance de langages tels que C, C++ et Rust dans l'index.
Envoyé par Paul Jansen, PDG de Tiobe
- Python, avec une part de marché de 14,51 %
- C, avec une part de marché de 14,41 %
- Java, avec une part de marché de 13,23 %
- C++, avec une part de marché de 12,96 %
- C#, avec une part de marché de 8,21 %
- Visual Basic, avec une part de marché de 4,4 %
- JavaScript, avec une part de marché de 2,1 %
- SQL, avec une part de marché de 1,68 %
- PHP, avec une part de marché de 1,36 %
- Go, avec une part de marché de 1,28 %
Le mois dernier, Go a signé son retour dans le top 10 de l'indice Tiobe de popularité des langages de programmation. C’est en juillet 2017 que le langage est apparu pour la dernière fois dans ce top 10. Go s'est classé 10e dans l'édition de mars de l'indice, après s'être classé 11e le mois précédent. Il faut noter que Go n'a jamais obtenue une meilleure place que la dixième.
Le PDG de Tiobe Software avait alors déclaré :
Envoyé par PDG Tiobe
Du côté de PYPL, un autre index de popularité des langages de programmation, le top 10 reste inchangé dans son édition d'avril 2023, Go ne figurant qu'à la douzième place. PyPL analyse la fréquence à laquelle les didacticiels de langage sont recherchés à l'aide de Google.
Voici le top 10 :
- Python, avec une part de marché de 27,43 %
- Java, avec une part de marché de 16,41 %
- JavaScript, avec une part de marché de 9,57 %
- C#, avec une part de marché de 6,9 %
- C/C++, avec une part de marché de 6,65 %
- PHP, avec une part de marché de 5,17 %
- R, avec une part de marché de 4,22 %
- TypeScript, avec une part de marché de 2,89 %
- Swift, avec une part de marché de 2,31 %
- Objective-C, avec une part de marché de 2,09 %
Ces baromètres ne représentent pas la réalité dans le monde de l'IT Pro francophone. Voici les langages les plus demandés et les mieux payés dans les offres d'emploi sur Developpez.com :
Un remplaçant pour C ?
Zig est décrit comme un « langage système de bas niveau ». Loris Cro, vice-président de la communauté à la Zig Software Foundation, a déclaré : « Je définis Zig comme un langage de programmation à usage général, car, bien qu'il convienne évidemment à la programmation de systèmes, il convient également à la programmation d'appareils embarqués, ciblant WebAssembly, écrivant des jeux et même la plupart des tâches qui seraient normalement gérées par langages de niveau supérieur ».
Pour Loris, bien que Zig soit en concurrence avec le C, « nous ne nous attendons pas à ce qu'il supplante le C sans une très longue période de temps où les deux langages doivent coexister ».
Objectifs de conception et syntaxe de Zig
Zig est un langage qui permet aux développeurs de travailler directement avec la mémoire système, une exigence pour écrire du code qui peut être optimisé au maximum pour sa tâche. L'allocation directe de mémoire est une caractéristique partagée par la famille C, Rust et d'autres langages système de bas niveau. Zig offre des fonctionnalités similaires, mais vise à les améliorer de plusieurs manières.
Zig cherche à être un langage orienté système plus simple que ses prédécesseurs et à faciliter l'écriture de code sûr et correct. Il vise également une meilleure expérience de développement. Lors du premier examen, les fonctionnalités de Zig pourraient ne pas sembler bouleversantes, mais l'effet global est celui d'une plateforme que les développeurs trouvent plus facile à maîtriser et à utiliser.
Actuellement, Zig est utilisé pour implémenter le runtime JavaScript Bun.js comme alternative à Node.js. Le créateur de Bun, Jarred Sumner, a déclaré : « Zig est un peu similaire à l'écriture C, mais avec de meilleures fonctionnalités de sécurité de la mémoire en mode débogage et des fonctionnalités modernes comme defer (un peu similaire à Go) et le code arbitraire peut être exécuté au moment de la compilation avec comptime. Il contient très peu de mots clefs, il est donc beaucoup plus facile à apprendre que C++ ou Rust ».
Zig diffère de la plupart des autres langages par sa petite empreinte de fonctionnalités, qui est le résultat d'un objectif de conception explicite : une seule façon évidente de faire les choses. Les développeurs de Zig prennent cet objectif tellement à cœur que pendant un certain temps, Zig n'avait pas de boucle for, ce qui était considéré comme une élaboration syntaxique inutile sur la boucle while déjà adéquate.
Kevin Lynagh, issu d'un milieu Rust, a écrit en 2021 :
J'ai passé l'année dernière à construire des claviers, ce qui comprenait l'écriture de micrologiciels pour diverses cartes de circuits imprimés personnalisées.
J'ai d'abord écrit ce firmware en Rust, mais malgré des années d'expérience avec ce langage, j'ai encore eu beaucoup de mal. J'ai fini par faire fonctionner mes claviers, mais cela a pris un temps embarrassant et ce n'était pas amusant.
Après des suggestions répétées de mon ami Jamie Brandon, beaucoup plus expérimenté en Rust et en informatique, j'ai réécrit le firmware dans Zig, ce qui s'est avéré très bien.
J'ai trouvé cela assez surprenant, étant donné que je n'avais jamais vu Zig auparavant et que c'est un langage pré-1.0 écrit par un autre hipster PDX avec essentiellement une seule page de documentation.
L'expérience s'est si bien passée, en fait, que j'ai maintenant autant envie de me tourner vers Zig (un langage que j'utilise depuis une dizaine d'heures) que vers Rust (que j'utilise depuis au moins mille heures).
Ceci, bien sûr, reflète autant sur moi et mes intérêts que sur l'une ou l'autre de ces langages. Je vais donc devoir expliquer ce que je veux d'un langage de programmation système en premier lieu.
De plus, pour expliquer pourquoi j'ai eu du mal avec Rust, je devrai montrer beaucoup de code complexe dont je suis évidemment mécontent. Mon intention ici n'est pas de me plaindre de Rust, mais d'établir mon (manque de) crédibilité : c'est pour que vous puissiez juger par vous-même si j'utilise les fonctionnalités de Rust de manière raisonnable ou si j'ai totalement perdu la trame(...).
Pourquoi suis-je enthousiasmé par Zig ?
La facilité d'apprentissage est bien si vous pouvez l'obtenir, bien sûr, mais je ne choisis pas un langage système parce que je veux quelque chose de facile à apprendre. Je le fais parce que je veux les capacités ; Je veux pousser les pixels autour de l'écran aussi vite que possible =D
En tant que tel, je suis enthousiasmé par Zig pour deux grandes raisons.
La première est qu'il s'agit d'un type de programmation système très différent de celui auquel je suis habitué : il est rapide, petit et amusant (...). Zig 0.7.1, d'autre part, compile mon firmware à partir de zéro en mode de publication en environ 5 secondes et son zig-cache/ consomme 1,4 Mo. Super !
Le langage est si petit et cohérent qu'après quelques heures d'étude, j'ai pu en savoir suffisamment pour faire mon travail.
J'ai d'abord écrit ce firmware en Rust, mais malgré des années d'expérience avec ce langage, j'ai encore eu beaucoup de mal. J'ai fini par faire fonctionner mes claviers, mais cela a pris un temps embarrassant et ce n'était pas amusant.
Après des suggestions répétées de mon ami Jamie Brandon, beaucoup plus expérimenté en Rust et en informatique, j'ai réécrit le firmware dans Zig, ce qui s'est avéré très bien.
J'ai trouvé cela assez surprenant, étant donné que je n'avais jamais vu Zig auparavant et que c'est un langage pré-1.0 écrit par un autre hipster PDX avec essentiellement une seule page de documentation.
L'expérience s'est si bien passée, en fait, que j'ai maintenant autant envie de me tourner vers Zig (un langage que j'utilise depuis une dizaine d'heures) que vers Rust (que j'utilise depuis au moins mille heures).
Ceci, bien sûr, reflète autant sur moi et mes intérêts que sur l'une ou l'autre de ces langages. Je vais donc devoir expliquer ce que je veux d'un langage de programmation système en premier lieu.
De plus, pour expliquer pourquoi j'ai eu du mal avec Rust, je devrai montrer beaucoup de code complexe dont je suis évidemment mécontent. Mon intention ici n'est pas de me plaindre de Rust, mais d'établir mon (manque de) crédibilité : c'est pour que vous puissiez juger par vous-même si j'utilise les fonctionnalités de Rust de manière raisonnable ou si j'ai totalement perdu la trame(...).
Pourquoi suis-je enthousiasmé par Zig ?
La facilité d'apprentissage est bien si vous pouvez l'obtenir, bien sûr, mais je ne choisis pas un langage système parce que je veux quelque chose de facile à apprendre. Je le fais parce que je veux les capacités ; Je veux pousser les pixels autour de l'écran aussi vite que possible =D
En tant que tel, je suis enthousiasmé par Zig pour deux grandes raisons.
La première est qu'il s'agit d'un type de programmation système très différent de celui auquel je suis habitué : il est rapide, petit et amusant (...). Zig 0.7.1, d'autre part, compile mon firmware à partir de zéro en mode de publication en environ 5 secondes et son zig-cache/ consomme 1,4 Mo. Super !
Le langage est si petit et cohérent qu'après quelques heures d'étude, j'ai pu en savoir suffisamment pour faire mon travail.
L'un des articles qui m'a d'abord intéressé à Zig est l'article de Kevin Lynagh sur l'écriture du firmware du clavier dans Zig qui met souvent l'accent sur la cohérence du langage :
« Le langage est si petit et cohérent qu'après quelques heures d'étude, j'ai pu en savoir suffisamment pour faire mon travail. … J'ai l'impression que Zig est un langage que je pourrais maîtriser; à intérioriser complètement de sorte que je puisse l'utiliser sans y penser. C'est super excitant et stimulant ».
À cette époque, j'étais en train d'apprendre Rust. J'avais une bonne compréhension des concepts de propriété et de durée de vie, ainsi que de la syntaxe du langage, mais je ne me sentais pas encore à l'aise pour créer mes propres projets. La lecture de cet éloge enthousiaste de Kevin m'a motivé à essayer Zig.
Maintenant, plus de six mois plus tard, j'ai passé pas mal de temps avec le langage de programmation Zig. Je trouve que le langage est petit et simple. Comme Kevin, je suis très enthousiaste à l'idée d'utiliser Zig et je me suis senti à l'aise et productif au début du processus d'apprentissage. De nombreux aspects du langage m'excitent, en particulier les capacités de métaprogrammation au moment de la compilation, mais pour cet article, je me concentrerai sur le système de type de Zig.
Parce que je connais bien C et que Zig est aussi un langage système, de nombreux exemples que je partage compareront Zig à C.
« Le langage est si petit et cohérent qu'après quelques heures d'étude, j'ai pu en savoir suffisamment pour faire mon travail. … J'ai l'impression que Zig est un langage que je pourrais maîtriser; à intérioriser complètement de sorte que je puisse l'utiliser sans y penser. C'est super excitant et stimulant ».
À cette époque, j'étais en train d'apprendre Rust. J'avais une bonne compréhension des concepts de propriété et de durée de vie, ainsi que de la syntaxe du langage, mais je ne me sentais pas encore à l'aise pour créer mes propres projets. La lecture de cet éloge enthousiaste de Kevin m'a motivé à essayer Zig.
Maintenant, plus de six mois plus tard, j'ai passé pas mal de temps avec le langage de programmation Zig. Je trouve que le langage est petit et simple. Comme Kevin, je suis très enthousiaste à l'idée d'utiliser Zig et je me suis senti à l'aise et productif au début du processus d'apprentissage. De nombreux aspects du langage m'excitent, en particulier les capacités de métaprogrammation au moment de la compilation, mais pour cet article, je me concentrerai sur le système de type de Zig.
Parce que je connais bien C et que Zig est aussi un langage système, de nombreux exemples que je partage compareront Zig à C.
Une particularité de Zig est qu'il ne traite pas l'allocation de mémoire directement dans le langage. Il n'y a pas de mot clef malloc comme en C/C++. Au lieu de cela, l'accès est géré explicitement dans la bibliothèque standard. Lorsque vous avez besoin d'une telle fonctionnalité, vous transmettez un objet Allocator. Cela a pour effet d'indiquer clairement quand la mémoire est engagée par les bibliothèques tout en faisant abstraction de la manière dont elle doit être traitée. Au lieu de cela, votre code client détermine le type d'allocateur approprié.
Faire de l'accès à la mémoire une caractéristique évidente de la bibliothèque vise à éviter les allocations cachées, ce qui est une aubaine pour les environnements à ressources limitées et en temps réel. La mémoire est retirée de la syntaxe du langage, où elle peut apparaître n'importe où, et sa gestion est rendue plus explicite.
Autoriser le code client à spécifier le type d'allocateur qu'il transmet à une API signifie que le code peut choisir en fonction de l'environnement qu'il cible. Cela signifie que le code de la bibliothèque devient plus évident et réutilisable. Une application peut déterminer quand exactement une bibliothèque qu'elle utilise accédera à la mémoire et lui attribuer le type d'allocateur (intégré, serveur, WASM, etc.) le plus approprié pour l'environnement d'exécution.
Par exemple, la bibliothèque standard Zig est livrée avec un alternateur de base appelé allocateur de page, qui demande de la mémoire au système d'exploitation en émettant : allocator const = std.heap.page_allocator;. Consultez la documentation Zig pour en savoir plus sur les répartiteurs disponibles.
Zig inclut également des fonctionnalités de sécurité pour éviter les débordements de mémoire tampon, et il est livré avec un répartiteur de débogage qui détecte les fuites de mémoire.
Emploi informatique 2022 : les langages les plus demandés et les mieux payés
Portail Emploi de Developpez.com
Sources : Tiobe, PYPL, Kevin Lynagh, Zig sur la boucle for, Nathan Craddock
Et vous ?
Quel(s) est/sont votre/vos langage(s) de programmation préférez ? Pour quels types de projets l'utilisez/les utilisez-vous ?
Que pensez-vous de Zig ? L'avez-vous déjà essayé ou êtes-vous tentés de le faire ?
Comment pouvez-vous expliquer son arrivée dans le top 50 de l'index TIOBE ?
D'ailleurs, que pensez-vous des méthodes d'évaluation de popularité de TIOBE ou des index concurrents ? Lesquelles trouvez-vous pertinentes et lesquelles le sont moins selon vous ? Pourquoi ?