Linguaggi a confronto! RUST vs MOVE

:radioactive:RUST vs MOVE!:radioactive:[1/8]
IL THREAD VERRÀ DIVISO IN SVARIATE PARTI (dovrebbero essere 8)

Circa un mese fa, una cordata di investitori mi ha scritto per sviluppare un progetto DEFI sia su $SUI che su $APT e ho avuto modo di studiare a fondo il loro linguaggio: MOVE.

Per effettuare una giusta analisi tecnica su Move, lo utilizzerò nella blockchain $SUI e RUST su $SOL (è importante associare al linguaggio le chain, dato che alcune tecnologie potrebbero variare).

[Questo thread non vuole definire il linguaggio migliore, ma evidenziare i diversi aspetti e i loro vantaggi. Inoltre verrà utilizzato un linguaggio poco tecnico e non approfondito per descrivere le specifiche in modo da renderlo accessibile a tutti.]

Iniziamo dai:

  • Programming Model di RUST
    RUST è un linguaggio compilato ed è compatibile con il SBF (Solana Bytecode Forma).
    Il Programming Model di RUST su $SOL si basa su Smart Contracts e Accounts.
    I primi possono essere richiamati nelle transazioni ed è possibile passare parametri (argomenti) durante una chiamata. Essi vengono detti stateless, ossia non possono leggere o scrivere senza essere legati ad un accounts.
    I secondi memorizzano lo stato dello smart contract. Ogni accounts è identificato in modo univoco dal suo indirizzo e ha una dimensione specifica in cui vengono memorizzati dati arbitrari e metadati ( ovvero le informazioni fondamentali sull’account stesso).
    All’interno dell’account vengono memorizzati anche gli eseguibili, che hanno un ID univoco.
    Nelle call degli smart contracts, i client devono specificare a priori a quali accounts lo smart contract dovrà accedere.
    Questo è di fondamentale importanza nell’efficienza: grazie a questa piccola chicca il runtime potrà eseguire transazioni non sovrapposte, in parallelo, garantendo consistenza nella chain.
    Questo è uno dei motivi principali per cui Solana è in grado di mantenere un elevato throughput, anche quando si sente dire che “EVM non scala”, ci si riferisce soprattutto a questo: non è in grado di parallelizzare l’elaborazione delle transazioni.
    Ovviamente gli eseguibili potranno richiamarsi a vicenda tramite le chiamate CPI (cross-program invocation) interface.

  • Programming Model di MOVE Il Programming Model di $SUI, ma anche di $ATP, si basa su Smart Contracts. Essi sono definiti come moduli (formati da funzioni e struct (tipi di dati personalizzati formati da dati primitivi [u8, u64, bool, etc])).
    Come su Rust, le funzioni possono richiamare altre funzioni, dato che tutti i moduli sono contenuti nello stesso sistema si possono chiamare a vicenda, senza l’uso di interfacce o api intermedie (al contrario di rust che usa CPI).
    Parlando nello specifico di MOVE [$SUI] è stato fatto un ottimo lavoro nell’ottica del riutilizzo: I dati sono definiti in strutture che possono essere conservate nelle transazioni , vengono trasformate in oggetti che possono essere: posseduti, condivisibili o immutabili.
    Questo facilita immensamente quella che è il modello di programmazione.

Concludendo la prima parte del Programming model, mi esprimo a favore di MOVE che presenta (in particolare su $SUI) un’ottimo pattern molto semplice ed intuitivo.
La sintassi di MOVE paragonata a quella di RUST, a parità di funzionalità risulta molto più leggera (meno righe di codice), più scorrevole ed efficace.
meno codice = meno bug + meno tempo di sviluppo

twitter: @iovin11