Rust: primo contatto

Rust, chi era costui?

The Rust logo

The Rust logo

Avevo già sentito nominare Rust come linguaggio di programmazione di sistema ma un colloquio al recente GuITmeeting a Roma, ha innescato la mia curiosità.

Tornato dallo splendido weekend romano tra passione storia e viaggio, ho consultato il sito ufficiale di Rust e la pagina corrispondente di Wikipedia.

Con questo post mostrerò i miei primi contatti con il linguaggio dopo aver letto il tutorial dal sito.

Installazione

Al momento, per Windows è disponibile un pacchetto pronto per l’installazione scaricabile dal sito ufficiale, ma per Linux o OS X è necessario compilare i sorgenti. L’operazione non è poi troppo difficile ma richiede un calcolatore con una discreta dotazione hardware (almeno 2GB di RAM), altrimenti si rischia di fare cosa “buona per riscaldare la stanza d’inverno” cit.

Per fortuna esistono un paio di repository su Launchpad da cui si possono installare le versioni del compilatore e degli strumenti necessari, adatti alla nostra versione di Ubuntu.
Per esempio quello di Hans Jørgen Hoel più aggiornato o quello di Kevin Cantu.

Io ho scelto quest’ultimo accontentandomi della versione 0.6 perché la mia Ubuntu è Lucid e nel primo repo non è presente la versione dedicata più recente: la 0.8. Ho installato Rust con i seguenti tre comandi:

$ sudo add-apt-repository ppa:kevincantu/rust
$ sudo apt-get update
$ sudo apt-get install rust

Prove

In Lua la keyword per definire una funzione è function, in Go è func ed in Rust è fn! Ecco quindi il classico Hello World!:

fn main() {
    println("Hello world!")
}

Il sorgente inserito in un file di testo va compilato con il comando (presupponendo di chiamare il sorgente ‘hello.rs’):

$ rust build hello.rs

Altro piccolissimo esempio: implementiamo la funzione gradino che restituisce 1 se l’argomento è positivo, 0 se zero e -1 se negativo:

fn main() {
	println(signum(123).to_str());
}

fn signum(x: int) -> int {
	if x < 0 {
 		-1
 	} else if x > 0 {
		 1
	} else {
		 0
	}
}

Perché manca il ‘return’?
In Rust l’istruzione condizionale if come gli altri costrutti del linguaggio, è un’espressione ciò significa che il condizionale produce un valore, che poi è preso come valore di ritorno della funzione.
Il simbolo del punto e virgola ; NON è il terminatore di riga necessario alla sintassi, ma bensì il modo per annullare l’espressione. In altre parole, con il punto e virgola istruiremo Rust a considerare l’espressione come uno statement. Il valore dell’espressione risulterà così non significativo.
Se infatti si inserisce il ; al termine del blocco dell’if (riga 12) si riceve questo errore:

0: 13:1 error: not all control paths return a value

La creazione di una variabile in Rust non è un’espressione, cioè in essa non viene restituito un valore ma viene compiuta un’azione. Ne segue che il ; finale risulta obbligatorio:

// creiamo una variabile intera
let a = 1000; // ok
let b = 2000  // error: expected `;`

Come avrete notato serve la chiave ‘let’ per creare una variabile (con la terminologia di Rust si dovrebbe dire: per creare uno slot), ma non è tutto.
Per default le variabili sono immutabili, ovvero non possono essere riassegnate. Solo aggiungendo il modificatore ‘mut’ la variabile diventa tale. In questo modo si deve esprimere nel codice cosa è destinato a cambiare, evitando errori:

let a = 1000;
let mut b = 2000;

a += 1; // error: re-assignment of immutable variable
b += 1; // ok

Prime impressioni

Rust è un linguaggio di programmazione sviluppato sotto l’egida di Mozilla Foundation che mira a diventare un C/C++ migliore. Per questo si confronta con il Go che viene giudicato in un’intervista allo stesso Autore di Rust, un buon linguaggio.

Il Go può attrarre sviluppatori dal mondo Python/Ruby. Nonostante che Rust disponga di più strutture dati del Go, sembra essere più tecnico, meno semplice da imparare, e forse potenzialmente migliore. Staremo a vedere se finalmente un nuovo linguaggio sostituirà od almeno affiancherà il C, ancora oggi saldamente sul trono dal 1978.

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • medeoTL  Il 1 novembre 2013 alle 15:04

    Molto interessante. Si sa perchè si prediligono le costanti (le variabili immutabili non sono che costanti) alle variabili?

    • robitex  Il 1 novembre 2013 alle 15:46

      Semplice. Se dichiari una variabile come immutabile il compilatore ti segnala l’errore se tenti di riassegnarla.
      Comunque i manuali di Rust non parlano di costanti ma di variabili mutabili e immutabili.
      Le costanti sono altri oggetti ancora definiti con la parola chiave static, ma nel tutorial ne parlano pochissimo.
      R.

  • juhan  Il 1 novembre 2013 alle 15:14

    Quindi è funzionale, come “va di moda” adesso. Altra cosa di moda ritornare il risultato dell’ultima espressione valutata come il Lisp (l’ho detto!).
    Tutto questo avendo letto solo questo post. E, confessione: Rust mi sembra intrigante! Chissà 😉

    • robitex  Il 1 novembre 2013 alle 15:50

      Si. Rust è funzionale ma anche procedurale ed ad oggetti… E concorrente.
      Non è ancora semplice trovare documentazione.
      Peró a differenza del Go gli utenti non hanno l’ingombrante presenza di uno dei colossi mondiali di internet.
      R.

  • ff0rt  Il 5 novembre 2013 alle 09:27

    Interessante. Come programmatore hobbista (di molto basso livello) non riesco ad abituarmi alle “fisime” del C. Avevo già incrociato Go, ma anche questo Rust sembra interessante. Ma questi linguaggi con una user base sempre molto ristretta… E sempre questa sintassi C-like…

    • robitex  Il 5 novembre 2013 alle 09:50

      Il numero degli utenti di Rust decreterà o meno il suo successo.
      Nell’ultimo anno molto lavoro è stato fatto sul linguaggio e sulla libreria standard e sembra quindi che abbia raggiunto un certo interesse.
      Ma si tratta solo di un tentativo ovviamente, come risulta chiaro se si va a leggere le FAQ sul progetto.
      Quanto alla sintassi C-like, penso sia una scelta corretta visto che Rust vuole essere un C migliore e gli sviluppatori arriverranno — forse — proprio dal C.
      Del resto anche il Go ha una sintassi C-like…
      E visto che anch’io sono un hobbista dilettante, posso permettermi di imparare Rust e sostituire Lua o Go per le mie necessità professionali.
      R.

    • juhan  Il 5 novembre 2013 alle 12:48

      La sintassi C-like è una quasi necessità, tutti la conoscono e sono abituati a quella. Anche perché la gente trova spesso a ridire sulla migliore esistente, quella del Lisp.
      Quando mi passa l’influenza magari ne scrivo qualcosa, mettendoci dentro anche Lua e Go.

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.