Actifs numériques

Top 10 des langages de programmation blockchain à connaître

mm
Ajouter Securities.io à vos sources préférées sur Google
Divulgation : Securities.io peut recevoir une compensation via les liens vers les produits évalués. Cela n’influence pas nos évaluations éditoriales. Nous ne sommes pas un conseiller en placement inscrit ; ceci ne constitue pas un conseil en placement. Consultez notre politique d’affiliation.
Top 10 Blockchain Programming Languages

Depuis l’introduction de Bitcoin, les outils de développement blockchain se sont diversifiés. Certains langages sont conçus pour les contrats intelligents, tandis que les langages généralistes servent aux nœuds, aux applications et aux services de support. Le choix adapté dépend du réseau et de l’usage.

Bitcoin Script est un langage précoce permettant de définir les conditions de dépense des transactions Bitcoin, pas le premier langage de programmation au monde. Le concept de contrat intelligent et les conditions programmables des transactions existaient aussi avant Ethereum. Ethereum a permis une plateforme applicative beaucoup plus largement programmable.

Cette liste présente dix langages employés dans des projets blockchain, sans classement. Il faut distinguer le code exécuté directement par la blockchain de celui des interfaces, serveurs et infrastructures. Tous les réseaux ne prennent pas en charge tous les langages pour leurs contrats.

1. Solidity

Solidity est très utilisé pour les contrats intelligents sur Ethereum et d’autres réseaux compatibles avec l’Ethereum Virtual Machine (EVM). Gavin Wood l’a proposé en 2014 ; Christian Reitwiessner et d’autres développeurs ont poursuivi son développement. C’est un langage de haut niveau à typage statique.

Solidity est généralement décrit comme Turing-complet. Cela ne signifie pas que toute fonction imaginable puisse être exécutée, ni que le langage soit automatiquement efficace. L’exécution EVM est notamment limitée par le gas : un contrat ne dispose pas de calcul illimité.

Sa syntaxe est influencée par C++, Python et JavaScript. Accolades, héritage, bibliothèques et types définis par l’utilisateur permettent des schémas familiers. Les développeurs doivent néanmoins apprendre le modèle particulier d’exécution et de sécurité des contrats intelligents.

Source : GitHub — Solidity, langage de contrats intelligents

Source : GitHub

Les outils et l’écosystème rendent Solidity utile pour de nombreux projets EVM. Popularité et code compact ne garantissent pas la sécurité : conception, tests et revue restent nécessaires.

2. Vyper

Vyper est un langage orienté contrats pour l’EVM, avec une syntaxe proche de Python. Simplicité, lisibilité et auditabilité sont des objectifs centraux, afin de faciliter la compréhension du comportement des contrats.

Les audits aident à trouver erreurs et vulnérabilités. Vyper n’est pas un langage de bas niveau décrivant directement le jeu d’instructions d’un ordinateur physique : le code est compilé pour l’EVM.

Vyper exclut volontairement certaines fonctions telles que l’héritage de classes et la surcharge des fonctions et opérateurs. Ces restrictions visent à limiter la complexité cachée. Python est un langage généraliste, pas propre à Ethereum, et Vyper n’est pas une exécution ordinaire de Python.

3. JavaScript

JavaScript sert aux interfaces et aux services de support des applications décentralisées. Des bibliothèques peuvent envoyer des transactions, appeler des contrats et lire des événements. Cela ne signifie pas que JavaScript soit directement exécutable comme langage de contrat sur tous les réseaux.

Brendan Eich a développé JavaScript en 1995 chez Netscape. La première version a été créée rapidement, puis le langage a beaucoup évolué. Il est largement utilisé sur des sites tels que Facebook et YouTube ; un pourcentage non daté ne doit pas être présenté comme une statistique actuelle.

JavaScript fonctionne dans les navigateurs et en dehors, grâce à des environnements tels que Node.js. Node.js est un environnement d’exécution, pas une version distincte du langage. Il permet de construire des serveurs et services communiquant avec des nœuds blockchain.

4. Plutus

Plutus comprend des langages et outils pour les contrats intelligents de Cardano, réseau utilisant la preuve d’enjeu. Son architecture diffère de celle d’Ethereum ; possibilités et limites doivent être évaluées dans le modèle Cardano.

Plutus Core est le langage de script exécuté dans le registre Cardano. Plutus Tx compile du code Haskell en Plutus Core. Le typage statique et l’approche fonctionnelle de Haskell aident à structurer les programmes, sans rendre une application automatiquement exempte d’erreurs.

Une application combine généralement du code de validation sur la chaîne et du code hors chaîne qui prépare les transactions et communique avec les utilisateurs. Ces composants ont des rôles différents et ne doivent pas nécessairement s’exécuter simultanément. GHC est Glasgow Haskell Compiler ; Plutus Tx convertit certaines parties du code vers le langage de validation Cardano.

5. Rholang

Rholang a été développé pour le calcul concurrent et distribué et est associé à RChain. Il repose sur le rho-calcul et la communication par messages, pas sur le modèle objet classique avec classes et héritage. Le code modulaire facilite la construction des applications.

Rholang utilise des canaux pour envoyer et recevoir des messages. La documentation décrit un typage comportemental, pas une simple copie du système de types de Haskell. Le modèle peut représenter des activités concurrentes ; l’exécution parallèle réelle dépend de l’environnement.

Ce modèle de communication peut décrire des protocoles et contrats intelligents. Le traitement des messages et les conditions contractuelles demandent une conception soigneuse. Le langage ne garantit automatiquement ni négociations correctes ni force juridique exécutoire.

6. Rust

Rust est un langage généraliste de programmation système combinant plusieurs paradigmes et une syntaxe en partie proche de C. Il prend en charge l’encapsulation et les traits, mais pas l’héritage classique des classes. La concurrence permet à des tâches de progresser indépendamment ; dans des conditions appropriées, elles peuvent aussi s’exécuter en parallèle.

Rust a été rendu public en 2010 ; la version stable 1.0 a suivi en 2015. Son système de propriété et d’emprunt aide le compilateur à prévenir de nombreuses erreurs mémoire sans ramasse-miettes traditionnel. Il n’élimine pas toutes les erreurs, notamment dans le code unsafe ou la logique applicative.

Rust est utilisé pour les logiciels système, moteurs de jeux et infrastructures blockchain, dont des composants de l’écosystème Polkadot et des clients Ethereum. Un client écrit en Rust ne signifie pas que tous les contrats Ethereum puissent être exécutés directement en Rust : le support dépend du réseau et de l’environnement d’exécution.

7. PHP

PHP est un langage de script côté serveur bien établi. En 1994, Rasmus Lerdorf a créé des outils pour suivre les visites de son CV en ligne, pas les paquets réseau. Son nom initial était Personal Home Page Tools ; le code source a été rendu public en juin 1995. PHP signifie aujourd’hui PHP: Hypertext Preprocessor.

PHP peut construire des sites et services qui communiquent avec des blockchains, par exemple par API ou JSON-RPC. Une application peut ainsi appeler des contrats ou proposer des fonctions liées aux jetons. PHP n’est pas en soi un langage de contrat standard de l’EVM ; le contrat s’exécute selon les règles du réseau concerné.

PHP est librement disponible et bénéficie d’une grande communauté et de nombreuses bibliothèques. Il peut convenir aux composants web d’un projet blockchain. Affirmer qu’il est idéal pour presque tout ou particulièrement dominant dans la DeFi est excessif.

8. Go

Go, également appelé informellement Golang, a été développé chez Google et rendu public comme projet open source le 10 novembre 2009. Les goroutines et canaux prennent en charge la concurrence. Les tâches peuvent s’exécuter en parallèle sur plusieurs cœurs, mais une baisse des coûts ou du temps d’exécution n’est pas automatique.

Go recherche une syntaxe claire, une construction rapide des programmes et du code maintenable. Son modèle de paquets aide à organiser et réutiliser le code. La simplicité syntaxique ne remplace pas une conception et une gestion des erreurs soigneuses.

Source : GitHub — Go, langage de développement blockchain

Source : GitHub — Go — langages de programmation blockchain

Le ramasse-miettes gère la mémoire devenue inutilisée pendant l’exécution ; ce n’est pas un protocole réseau. Go est utilisé pour des clients blockchain et d’autres services réseau. Les packages sont des paquets de code, pas des paquets réseau.

9. C++

C++ est un langage généraliste fondé sur C, apparu dans les années 1970. Il propose notamment la programmation objet et générique pour les applications, systèmes d’exploitation et infrastructures blockchain. Le support propre au réseau détermine s’il peut aussi servir directement aux contrats.

Le langage offre un contrôle important des ressources système et convient aux logiciels exigeants en performances. Bibliothèques et outils sont largement disponibles. La capacité de montée en charge dépend toutefois de l’architecture et de l’implémentation, pas automatiquement du choix du langage.

C++ est disponible sur de nombreux systèmes d’exploitation. La gestion de la mémoire et des ressources exige de l’attention, mais RAII, conteneurs et pointeurs intelligents automatisent beaucoup de libérations. Le ramasse-miettes libère de la mémoire : c’est différent du débogage. Les programmes utilisant un ramasse-miettes doivent aussi être testés et examinés pour trouver les erreurs.

10. C#

C# est un langage de haut niveau de la famille C et fait partie de l’écosystème .NET. Il prend notamment en charge la programmation objet et les composants réutilisables. Une syntaxe familière peut faciliter l’apprentissage, mais la connaissance de C ne couvre pas toutes les particularités de C#.

Microsoft a présenté C# autour de l’an 2000. Microsoft (MSFT ) a développé le langage avec la plateforme .NET. Il est utilisé pour les services web, applications mobiles, jeux, IoT et infrastructures blockchain. La plateforme et les outils se sont ensuite enrichis.

C# peut être plus productif que C++ dans certaines applications selon les exigences et l’expérience de l’équipe. Il n’est pas issu uniquement du développement web. Les bibliothèques et l’environnement .NET le rendent utile notamment pour les services web et cloud ; le support des contrats reste propre au réseau.

La sécurité demande plus que le choix d’un langage

Les erreurs des applications décentralisées peuvent provoquer des pertes et des vulnérabilités. Choisissez des outils et un langage adaptés au réseau et associez-les aux tests, revues de code et audits indépendants si nécessaire. Aucun de ces dix langages ne prévient à lui seul toutes les erreurs ou attaques.

Découvrez d’autres projets blockchain dans cette présentation.

David Hamilton est un journaliste à plein temps et un bitcoiniste de longue date. Il se spécialise dans la rédaction d'articles sur la blockchain. Ses articles ont été publiés dans plusieurs publications bitcoin, notamment Bitcoinlightning.com