Qu'est-ce que le langage de programmation V et quelles sont ses aspirations ?
Le langage de programmation a été créé par Alex Medvedniko, un développeur néerlandais qui dit s'être énormément attaché à la simplicité et à la performance. Selon Alex, tout ce que vous pouvez faire avec les autres langages existants est également faisable avec V. Alex a indiqué avoir créé le langage V pour mener à bien son projet Volt. En parlant de Volt, il fait référence à un client de bureau natif pour Slack, Skype, Matrix, Telegram, Twitch et de nombreux autres services. Volt vous évite d'avoir recours à une douzaine d'applications pour atteindre tous vos contacts sur différentes plateformes.
Lors de la présentation du langage V en mars 2019, Alex a indiqué qu’il dispose de nombreuses caractéristiques qui attirent le plus souvent les développeurs, dont sa rapidité et sa sécurité, sa légèreté et sa capacité à traduire l’entièreté de vos projets C/C++. Il a ajouté que la totalité du langage V et sa bibliothèque standard sont inférieures à 400 Ko. La documentation de V renseigne aussi qu'il peut compiler jusqu’à 1,2 million de lignes de code par seconde par cœur de processeur. Avant sa sortie publique, un accès anticipé avait été offert au mois de mai pour ceux qui ont rejoint la communauté du langage comme membre premium.
À sa publication en tant que projet open source en juin 2019, Alex et les autres développeurs ont indiqué que V respecte son engagement, en restant un langage simple, rapide, sûr et compilé pour les développeurs de logiciels maintenables. Le langage a été lancé en open source avec les caractéristiques telles qu’une compilation rapide du code écrit en V, la sécurité du langage, un traducteur C/C++, un rechargement à chaud du code pour prendre en compte instantanément les modifications et une taille très minime d’environ 400 Ko, car elle ne contient pas de dépendances.
Outre cela, la documentation de V indique qu'il est semblable à Go (Golang), un langage de programmation développé par Google et dont la première version remonte à novembre 2009. V est également influencé par Oberon, Rust et Swift. Côté performance, l’équipe estime que V est aussi rapide que le C, tout en proposant une interopérabilité avec ce dernier.
Les nouvelles fonctionnalités/améliorations introduites par la version 0.2 de V
La fonctionnalité la plus mise en avant par les développeurs de V dans cette version du langage est la gestion de la mémoire. En effet, la gestion de la mémoire est un aspect d'un langage qui a l'une des plus grandes influences sur la façon dont il se comporte : elle affecte le système de types et les types de types que vous pouvez avoir, elle affecte l'efficacité dans le temps et dans l'espace, elle affecte le modèle cognitif du programmeur dans lequel les structures de données peuvent être représentées, etc. En outre, elle affecte la latence, l'interopérabilité, et bien plus encore.
Mais il semble être souvent ignoré et presque invisible en même temps. Beaucoup de développeurs considèrent qu'il s'agit d'un problème "résolu", puisque probablement 95 % des langages de programmation utilisent une forme quelconque de ramasse-miettes : il faut allouer, puis se préoccuper de récupérer les objets inaccessibles plus tard. Selon certains, le problème est peut-être que pendant très longtemps, les alternatives n'ont pas été très nombreuses. Les langages de bas niveau utiliseraient une gestion manuelle de la mémoire (efficace, mais sujette aux erreurs), et certaines ont utilisé le comptage des références.
Puis il y a eu les langages basés sur des types ou des régions linéaires, mais celles-ci ne sont jamais entrées dans le courant dominant. En gros, c'est un aspect plus qu'important dans la construction d'un langage de programmation. La gestion de la mémoire est d'ailleurs l'une des principales raisons pour lesquelles le langage de programmation Rust, développé par Mozilla Research, remporte un franc succès aujourd'hui. Il est cité par les plus grands noms de l'industrie, dont Microsoft, comme étant la solution adéquate pour une bonne utilisation de la mémoire. Outre la gestion de la mémoire, Vlang 0.2 introduit d'autres fonctionnalités, notamment :
- les canaux et serrures (channels and locks) ;
- le thread des tableaux typés sécurisés via un mot clé "shared" ;
- l'incorporation structurelle ;
- les flux d'E/S ;
- un module websocket puissant conforme à la RFC 6455 et qui réussit la suite de tests Autobahn (498 tests client et 249 tests serveur) ;
- le module "net" est maintenant non bloquant et est plus complet fournissant une API similaire à Go ;
- le module graphique de V utilise désormais Metal / DirectX / OpenGL au lieu de simplement OpenGL ;
- V peut maintenant s'exécuter dans le navigateur via WASM (WebAssembly) et exécuter du code V en le traduisant en JavaScript ;
- les binaires V pour Linux / Windows / macOS sont désormais créés et déployés automatiquement via les actions GitHub ;
- casting intelligent pour les sumtypes et les interfaces, y compris les expressions complexes : if x.expr is int { println(x.expr + 1) } ;
- une façon simple et propre de trier les tableaux : users.sort(a.name > b.name) ;
- plusieurs corrections et d'améliorations pour vfmt. Il a désormais atteint un point où il peut être utilisé en toute sécurité sur n'importe quel fichier source V ;
- un nouvel outil "v vet" pour analyser le projet et trouver les bogues et erreurs potentiels ;
- un nouveau module "term.ui" pour créer des interfaces utilisateur de terminal dynamiques avec un exemple d'éditeur écrit dedans ;
- la prise en charge précoce d'iOS et d'Android ;
- toutes les fonctionnalités ORM manquantes de l'ancien backend ont été ramenées ;
- la variable "Magic it" a été remplacée par des casts intelligents (le changement est entièrement géré par vfmt) ;
- la compilation croisée sous Windows et Linux est revenue ;
- C2V peut désormais générer des wrappers ;
- la prise en charge du compilateur C ++ : le code généré par le backend C peut désormais être compilé par des compilateurs C ++.
- la syntaxe générique courte : foo(5) au lieu de foo<int>(5) ;
- de nombreuses erreurs qui se produisent souvent au cours du cycle de développement ont été transformées en avertissements pour augmenter la vitesse de développement. Ce sont toujours des erreurs dans les versions de production ;
- il y a beaucoup plus de documentation. La documentation en langue officielle a été multipliée par 3 ;
- modules.vlang.io est maintenant généré automatiquement à chaque commit ;
- le sérialiseur JSON intégré au moment de la compilation prend désormais en charge time.Time ;
- la correction des alias de type, pour les faire se comporter comme les types qu'ils "aliasent" ;
- array.contains(element) est désormais générique ;
- Vlang 0.2 apporte beaucoup d'améliorations dans le backend JS et son système de types ;
- de nombreuses vérifications manquantes dans le vérificateur de type ont été ajoutées (par exemple, vérification de l'utilisation correcte des champs de structure publique) ;
- ajout du module Webview dans V UI.
- ajout de l'attribut [export] pour modifier le nom de la fonction exportée (par exemple pour un appel depuis une bibliothèque C) ;
- des améliorations ont été apportées à rand : rand.ulid(), rand.uuid(), une API PRNG personnalisable unifiée ;
- des centaines d'autres correctifs, fonctionnalités et tests ;
- etc.
Quelques critiques de la communauté sur le langage de programmation V
Beaucoup restent sceptiques par rapport aux nombreuses performances citées par les auteurs pour le langage. Est-ce possible que le projet aussi jeune qu’il est allie toutes ces fonctionnalités ? « Quand on voit la liste de caractéristiques que le langage propose, on peut se demander si l'auteur ne nous vend pas du rêve. Faire mieux que Go, Rust et C++ me semble (un tantinet) surréaliste », a déclaré un critique lors de la sortie de la première version de V.
Lorsque la version open source du langage a été publiée, certains ont déclaré que V n'est ni plus ni moins qu'un traducteur de C/C++, avec la plupart des fonctionnalités annoncées supprimées. Ces derniers ont déclaré qu'Alex, le développeur principal de V, n'a pas implémenté les fonctionnalités complexes qu'il prétend, mais met en avant des avantages comme le temps de compilation. Malgré le nombre très élevé de commentaires qui vont à l’encontre des idées du développeur du langage V, il y en a quelques-uns qui louent ses efforts.
Avec l'annonce de la disponibilité de la version 0.2 de V, certains ont continué de dire qu'Alex livre à chaque version un "sous-produit" et fait de fausses déclarations. Voici un exemple de commentaire d'un membre de la communauté : « La façon dont je décrirais ce que je vois de l'auteur de V dans ses deux projets (V et Volt/eul) est une "surpromotion" et une "sous-production" continuelles, ainsi que des déclarations trompeuses ». Selon certains, il est tout à fait possible d'utiliser V dans son état actuel, mais il faudrait faire attention à bien choisir le projet pour lequel l'on souhaite l'utiliser et ne pas s'appuyer sur les déclarations de l'auteur.
Source : V (Vlang) 0.2
Et vous ?
Avez-vous déjà essayé V ? Si oui, offre-t-il toutes les fonctionnalités citées par l'auteur ?
Le projet promet-il ou cessera-t-il d’exister dans les prochaines années ? A-t-il des chances de suivi contre Go, C/C ++ et Rust ?
Voir aussi
Le langage de programmation V vient d'être publié en open source et semble ne pas tenir toutes ses promesses
Le langage Rust est la meilleure chance offerte à l'industrie informatique pour la mise sur pied d'applications système sécurisées, d'après Microsoft
Après Microsoft et Linux, c'est au tour d'Apple de montrer de plus en plus d'intérêt pour l'utilisation de Rust dans la programmation de bas niveau
Amazon : « nous embauchons des ingénieurs en logiciels qui maîtrisent le langage de programmation Rust », AWS estime que Rust est un élément essentiel de sa stratégie à long terme
Rust entre dans le top 20 de l'indice Tiobe de popularité des langages de programmation pour la première fois, C conserve la tête du classement et Java la seconde place