Vai al contenuto principale
Change page

Linguaggi per gli smart contract

Un aspetto fantastico di Ethereum è che gli smart contract possono essere programmati usando linguaggi relativamente facili per gli sviluppatori. Se hai esperienza con Python o con qualsiasi linguaggio a parentesi graffe (opens in a new tab), puoi trovare un linguaggio con una sintassi familiare.

I due linguaggi più attivi e mantenuti sono:

  • Solidity
  • Vyper

L'IDE Remix fornisce un ambiente di sviluppo completo per creare e testare contratti sia in Solidity che in Vyper. Prova l'IDE Remix nel browser (opens in a new tab) per iniziare a programmare.

Gli sviluppatori più esperti potrebbero anche voler usare Yul, un linguaggio intermedio per la Ethereum Virtual Machine, o Yul+, un'estensione di Yul.

Se sei curioso e ti piace aiutare a testare nuovi linguaggi che sono ancora in forte sviluppo, puoi sperimentare con Fe, un linguaggio emergente per gli smart contract che è attualmente ancora agli inizi.

Prerequisiti

Una conoscenza pregressa dei linguaggi di programmazione, specialmente di JavaScript o Python, può aiutarti a comprendere le differenze nei linguaggi per gli smart contract. Ti consigliamo inoltre di comprendere gli smart contract come concetto prima di addentrarti troppo nei confronti tra i linguaggi. Introduzione agli smart contract.

Solidity

  • Linguaggio ad alto livello orientato agli oggetti per l'implementazione di smart contract.
  • Linguaggio a parentesi graffe che è stato profondamente influenzato dal C++.
  • Tipizzato staticamente (il tipo di una variabile è noto in fase di compilazione).
  • Supporta:
    • Ereditarietà (puoi estendere altri contratti).
    • Librerie (puoi creare codice riutilizzabile che puoi chiamare da contratti diversi, come le funzioni statiche in una classe statica in altri linguaggi di programmazione orientati agli oggetti).
    • Tipi complessi definiti dall'utente.

Contratto di esempio

Questo esempio dovrebbe darti un'idea di come sia la sintassi di un contratto in Solidity. Per una descrizione più dettagliata delle funzioni e delle variabili, consulta la documentazione (opens in a new tab).

Vyper

  • Linguaggio di programmazione pythonico
  • Tipizzazione forte
  • Codice del compilatore ridotto e comprensibile
  • Generazione efficiente del bytecode
  • Ha deliberatamente meno funzionalità rispetto a Solidity con l'obiettivo di rendere i contratti più sicuri e facili da verificare. Vyper non supporta:
    • Modificatori
    • Ereditarietà
    • Assembly inline
    • Overloading delle funzioni
    • Overloading degli operatori
    • Chiamate ricorsive
    • Cicli di lunghezza infinita
    • Punti fissi binari

Per maggiori informazioni, leggi la logica di Vyper (opens in a new tab).

Esempio

Questo esempio dovrebbe darti un'idea di come sia la sintassi di un contratto in Vyper. Per una descrizione più dettagliata delle funzioni e delle variabili, consulta la documentazione (opens in a new tab).

Yul e Yul+

Se sei nuovo su Ethereum e non hai ancora programmato con i linguaggi per gli smart contract, ti consigliamo di iniziare con Solidity o Vyper. Esamina Yul o Yul+ solo quando avrai familiarità con le migliori pratiche di sicurezza degli smart contract e con le specifiche del lavoro con la EVM.

Yul

  • Linguaggio intermedio per Ethereum.
  • Supporta la EVM ed Ewasm (opens in a new tab), un WebAssembly in stile Ethereum, ed è progettato per essere un denominatore comune utilizzabile per entrambe le piattaforme.
  • Ottimo target per le fasi di ottimizzazione ad alto livello che possono avvantaggiare equamente sia le piattaforme EVM che Ewasm.

Yul+

  • Un'estensione di Yul a basso livello e altamente efficiente.
  • Inizialmente progettato per un contratto di rollup ottimistico.
  • Yul+ può essere considerato come una proposta di aggiornamento sperimentale per Yul, aggiungendovi nuove funzionalità.

Contratto di esempio

Il seguente semplice esempio implementa una funzione di potenza. Può essere compilato usando solc --strict-assembly --bin input.yul. L'esempio dovrebbe essere salvato nel file input.yul.

Se hai già molta esperienza con gli smart contract, puoi trovare un'implementazione completa di ERC-20 in Yul qui (opens in a new tab).

Fe

  • Linguaggio tipizzato staticamente per la Ethereum Virtual Machine (EVM).
  • Ispirato a Python e Rust.
  • Mira a essere facile da imparare, anche per gli sviluppatori che sono nuovi nell'ecosistema di Ethereum.
  • Lo sviluppo di Fe è ancora nelle sue fasi iniziali, il linguaggio ha avuto la sua versione alpha a gennaio 2021.

Contratto di esempio

Di seguito è riportato un semplice contratto implementato in Fe.

Come scegliere

Come per qualsiasi altro linguaggio di programmazione, si tratta principalmente di scegliere lo strumento giusto per il lavoro giusto, oltre che di preferenze personali.

Ecco alcune cose da considerare se non hai ancora provato nessuno dei linguaggi:

Cosa c'è di fantastico in Solidity?

  • Se sei un principiante, ci sono molti tutorial e strumenti di apprendimento in circolazione. Scopri di più nella sezione Imparare programmando.
  • Sono disponibili ottimi strumenti per gli sviluppatori.
  • Solidity ha una grande community di sviluppatori, il che significa che molto probabilmente troverai risposte alle tue domande abbastanza rapidamente.

Cosa c'è di fantastico in Vyper?

  • Ottimo modo per iniziare per gli sviluppatori Python che vogliono scrivere smart contract.
  • Vyper ha un numero minore di funzionalità, il che lo rende ottimo per la prototipazione rapida di idee.
  • Vyper mira a essere facile da verificare e il più leggibile possibile per gli esseri umani.

Cosa c'è di fantastico in Yul e Yul+?

  • Linguaggio a basso livello semplicistico e funzionale.
  • Permette di avvicinarsi molto di più alla EVM pura, il che può aiutare a ottimizzare l'utilizzo di gas dei tuoi contratti.

Confronti tra i linguaggi

Per confronti sulla sintassi di base, il ciclo di vita del contratto, le interfacce, gli operatori, le strutture dati, le funzioni, il flusso di controllo e altro ancora, dai un'occhiata a questo cheatsheet di Auditless (opens in a new tab)

Letture consigliate