Asset digitali
Dieci linguaggi di programmazione blockchain da conoscere

Dall’introduzione di Bitcoin, gli strumenti per sviluppare blockchain si sono ampliati. Alcuni linguaggi sono pensati per gli smart contract, mentre quelli generici servono a costruire nodi, applicazioni e servizi di supporto. La scelta adatta dipende dalla rete e dall’impiego.
Bitcoin Script è un linguaggio iniziale per specificare le condizioni di spesa delle transazioni Bitcoin, non il primo linguaggio di programmazione al mondo. Anche il concetto di smart contract e le condizioni programmabili delle transazioni precedono Ethereum. Ethereum ha reso possibile una piattaforma applicativa molto più generalmente programmabile.
Questa lista presenta dieci linguaggi utilizzati nei progetti blockchain, senza graduatoria. Bisogna distinguere il codice eseguito direttamente dalla blockchain da quello per interfacce, server e infrastruttura. Non tutte le reti supportano tutti i linguaggi per i contratti.
1. Solidity
Solidity è molto utilizzato per gli smart contract su Ethereum e altre reti compatibili con Ethereum Virtual Machine (EVM). Gavin Wood lo propose nel 2014; Christian Reitwiessner e altri sviluppatori ne proseguirono lo sviluppo. È un linguaggio di alto livello con tipizzazione statica.
Solidity viene generalmente descritto come Turing-completo. Ciò non significa che possa eseguire qualsiasi funzione immaginabile o che sia automaticamente efficiente. L’esecuzione EVM è limitata, fra l’altro, dal gas: un contratto non dispone di calcolo illimitato.
La sintassi è influenzata da C++, Python e JavaScript. Parentesi graffe, ereditarietà, librerie e tipi definiti dall’utente permettono schemi familiari. Gli sviluppatori devono comunque imparare il particolare modello di esecuzione e sicurezza degli smart contract.

Fonte: GitHub
Gli strumenti e l’ecosistema rendono Solidity utile per vari progetti EVM. Popolarità e codice compatto non garantiscono sicurezza: progettazione, test e revisione restano necessari.
2. Vyper
Vyper è un linguaggio orientato ai contratti per EVM con sintassi simile a Python. Semplicità, leggibilità e verificabilità sono obiettivi centrali, per rendere il comportamento dei contratti più facile da seguire a sviluppatori e revisori.
Gli audit aiutano a trovare errori e vulnerabilità. Vyper non è un linguaggio di basso livello che descrive direttamente le istruzioni di un computer fisico: il codice viene compilato per l’esecuzione sulla EVM.
Vyper esclude intenzionalmente funzionalità come l’ereditarietà delle classi e il sovraccarico di funzioni e operatori. Queste limitazioni mirano a ridurre la complessità nascosta. Python è un linguaggio generico, non specifico di Ethereum, e Vyper non equivale alla normale esecuzione di Python.
3. JavaScript
JavaScript viene usato per interfacce e servizi di supporto delle applicazioni decentralizzate. Le librerie possono inviare transazioni, chiamare contratti e leggere eventi. Ciò non significa che JavaScript sia eseguibile direttamente come linguaggio di contratto su ogni rete.
Brendan Eich sviluppò JavaScript nel 1995 presso Netscape. La prima versione nacque rapidamente; in seguito il linguaggio si è evoluto considerevolmente. È molto usato sui siti web, fra cui Facebook e YouTube; una percentuale senza data non va presentata come dato attuale.
JavaScript funziona nei browser e anche al di fuori di essi tramite ambienti come Node.js. Node.js è un ambiente di esecuzione, non una versione separata del linguaggio. Consente di costruire server e servizi che comunicano con i nodi blockchain.
4. Plutus
Plutus comprende linguaggi e strumenti per gli smart contract di Cardano, rete con consenso proof-of-stake. La sua architettura differisce da quella di Ethereum, quindi possibilità e limiti vanno valutati nel modello Cardano.
Plutus Core è il linguaggio di scripting eseguito nel registro Cardano. Plutus Tx compila codice Haskell in Plutus Core. La tipizzazione statica e l’approccio funzionale di Haskell aiutano a strutturare i programmi, ma non rendono un’applicazione automaticamente priva di errori.
Un’applicazione combina normalmente codice di validazione on-chain e codice off-chain che prepara transazioni e comunica con gli utenti. I componenti hanno ruoli diversi e non devono necessariamente essere eseguiti contemporaneamente. GHC è Glasgow Haskell Compiler; Plutus Tx converte specifiche parti di codice nel linguaggio di validazione Cardano.
5. Rholang
Rholang è stato sviluppato per il calcolo concorrente e distribuito ed è associato a RChain. Si basa sul rho-calcolo e sulla comunicazione tramite messaggi, non sul modello classico di oggetti, classi ed ereditarietà. Il codice modulare aiuta a costruire applicazioni.
Rholang usa canali per inviare e ricevere messaggi. La documentazione del progetto descrive una tipizzazione comportamentale, non una semplice copia del sistema di tipi di Haskell. Il modello può descrivere attività concorrenti; il parallelismo effettivo dipende dall’ambiente.
Questo modello di comunicazione permette di descrivere protocolli e smart contract. Gestione dei messaggi e condizioni contrattuali richiedono progettazione accurata. Il linguaggio non garantisce automaticamente negoziazioni corrette o applicabilità giuridica.
6. Rust
Rust è un linguaggio generico per la programmazione di sistema che combina diversi paradigmi e una sintassi in parte simile a C. Supporta incapsulamento e trait, ma non la classica ereditarietà delle classi. La concorrenza consente a compiti indipendenti di progredire; in condizioni appropriate possono anche essere eseguiti in parallelo.
Rust fu reso pubblico nel 2010; la versione stabile 1.0 seguì nel 2015. Il sistema di proprietà e prestiti permette al compilatore di prevenire molti errori di memoria senza un garbage collector tradizionale. Non elimina tutti gli errori, soprattutto nel codice unsafe o nella logica applicativa.
Rust viene usato per software di sistema, motori di gioco e infrastrutture blockchain, compresi componenti dell’ecosistema Polkadot e client Ethereum. Un client scritto in Rust non implica che tutti i contratti Ethereum possano essere eseguiti direttamente in Rust: il supporto dipende dalla rete e dall’ambiente di esecuzione.
7. PHP
PHP è un linguaggio di scripting lato server consolidato. Nel 1994 Rasmus Lerdorf creò strumenti per monitorare le visite al proprio curriculum online, non i pacchetti di rete. Il nome iniziale era Personal Home Page Tools; il codice sorgente fu reso pubblico nel giugno 1995. Oggi PHP significa PHP: Hypertext Preprocessor.
PHP può costruire siti e servizi che comunicano con blockchain, per esempio tramite API o JSON-RPC. L’applicazione può così chiamare contratti o offrire funzioni relative ai token. PHP non è di per sé un normale linguaggio di contratto EVM; il contratto viene eseguito secondo le regole della rete.
PHP è liberamente disponibile e dispone di una grande comunità e numerose librerie. Può essere adatto ai componenti web di un progetto blockchain. Le affermazioni secondo cui sarebbe ideale per quasi tutto o particolarmente dominante nella DeFi sono eccessive.
8. Go
Go, chiamato informalmente anche Golang, fu sviluppato presso Google e reso pubblico come progetto open source il 10 novembre 2009. Goroutine e canali supportano la concorrenza. I compiti possono essere eseguiti parallelamente su più core, ma riduzioni di costi o tempi non sono automatiche.
Go mira a una sintassi chiara, processi di compilazione rapidi e codice manutenibile. Il modello a pacchetti aiuta a organizzare e riutilizzare il codice. La semplicità sintattica non sostituisce progettazione e gestione degli errori accurate.

Fonte: GitHub — Go — linguaggi di programmazione blockchain
Il garbage collector gestisce la memoria non più utilizzata durante l’esecuzione; non è un protocollo di rete. Go viene usato per client blockchain e altri servizi di rete. I package sono pacchetti di codice, non pacchetti di rete.
9. C++
C++ è un linguaggio generico che si basa su C, nato negli anni Settanta. Offre fra l’altro programmazione a oggetti e generica per applicazioni, sistemi operativi e infrastrutture blockchain. Il supporto specifico della rete determina se sia utilizzabile direttamente anche per contratti.
Il linguaggio offre ampio controllo sulle risorse ed è adatto a software con esigenze prestazionali elevate. Librerie e strumenti sono largamente disponibili. La scalabilità dipende però dall’architettura e dall’implementazione, non automaticamente dalla scelta del linguaggio.
C++ è disponibile su molti sistemi operativi. La gestione di memoria e risorse richiede attenzione, ma tecniche moderne come RAII, contenitori e puntatori intelligenti automatizzano molte operazioni di rilascio. Il garbage collector libera memoria: è un’attività diversa dal debugging. Anche i programmi in linguaggi con garbage collection devono essere testati e controllati.
10. C#
C# è un linguaggio di alto livello della famiglia C e parte dell’ecosistema .NET. Supporta fra l’altro programmazione a oggetti e componenti riutilizzabili. La sintassi familiare può aiutare l’apprendimento, ma la sola conoscenza di C non copre tutte le sue caratteristiche.
Microsoft presentò C# intorno al 2000. Microsoft (MSFT ) sviluppò il linguaggio insieme alla piattaforma .NET. Viene usato per servizi web, applicazioni mobili, giochi, IoT e infrastrutture blockchain. La piattaforma e gli strumenti si sono successivamente ampliati.
C# può essere più produttivo di C++ in alcune applicazioni, secondo i requisiti e l’esperienza del gruppo. Non nasce esclusivamente dallo sviluppo web. Le librerie e l’ambiente .NET lo rendono utile fra l’altro per servizi web e cloud; il supporto ai contratti dipende comunque dalla rete.
La sicurezza richiede più della scelta del linguaggio
Gli errori nelle applicazioni decentralizzate possono provocare perdite e vulnerabilità. Scegli linguaggio e strumenti adatti alla rete, affiancandoli a test, revisione del codice e audit indipendenti quando necessari. Nessuno di questi dieci linguaggi impedisce da solo errori o attacchi.
Scopri altri progetti blockchain in questa panoramica.












