Webinar su Rust e Monadi: Panoramica

Aug 16, 2024

Note del Webinar su Rust e Monadi

Introduzione

  • Dove vedere: azienda che sviluppa software e hardware per vari settori industriali.
  • Evento: webinar su Rust, monadi, gestione degli errori.
  • Codice sconto disponibile per l'evento Globo.
  • Link per iscriversi alla newsletter.

Presentazione di Luca Aldi

  • Tema: Rust e in particolare Monadi.
  • Struttura della presentazione:
    1. Introduzione alle monadi.
    2. Gestione del null e degli errori.
    3. Rust asincrono.
    4. Esempio pratico.
    5. Conclusioni e suggerimenti.

Monadi

  • Definizione: concetti derivanti dalla teoria delle categorie, utilizzati nei linguaggi di programmazione funzionali.
  • Caratteristiche delle monadi:
    • Deve avere un tipo.
    • Costruttore per creare una monade da un tipo di base.
    • Funzioni fmap e bind.

Esempio delle monadi

  • Monade come scatola contenente un valore (es. una mela).
  • Funzione fmap: trasforma un valore all'interno della monade.
  • Funzione bind: applica una funzione che restituisce una monade.

Gestione del Null in Rust

  • Introduzione dell'Option: un tipo speciale per gestire l'assenza di un valore.
  • Caratteristiche di Option:
    • Some(value): valore presente.
    • None: valore assente.
  • Differenze rispetto al valore nullo in altri linguaggi.

Funzioni di Option

  • Costruttore: Option<T> crea una nuova opzione.
  • fmap: applica una funzione che non fallisce.
  • bind: applica una funzione che può fallire (restituisce Option).

Gestione degli Errori

  • Introduzione al tipo Result: rappresenta il risultato di un'operazione che può fallire.
    • Stati: Ok(value) o Err(error).
  • Differenza tra gestire errori come valori versus eccezioni in altri linguaggi.

Funzioni di Result

  • Costruttore: creazione di un Result<T, E>.
  • fmap: applica una trasformazione su un risultato valido.
  • bind: concatenazione di operazioni fallibili.

Rust Asincrono

  • Introduzione di futures in Rust.
  • Utilizzo delle parole chiave async e await per gestire operazioni asincrone.
  • Caratteristiche delle futures:
    • Costruttore: creazione di una future.
    • fmap: applicazione di trasformazioni su futures.
    • bind: concatenazione di future.

Esempio Pratico

  • Creazione di un oggetto Persona partendo da un file di testo.
    • Implementazione di metodi per la gestione degli errori.
    • Utilizzo di Option e Result per gestire stati e errori.
  • Utilizzo della libreria Serra per semplificare la gestione degli errori.

Conclusioni e Suggerimenti

  • Utilità delle monadi per gestire operazioni sincrone e asincrone.
  • Importanza della gestione degli errori in modo idiomatico.
  • Consigli per l'approfondimento della programmazione in Rust.

Domande e Risposte

  • Possibilità di creare nuove monadi tramite la definizione di nuovi traits.
  • Curva di apprendimento di Rust: potrebbe essere ripida, ma con risorse adeguate (come il Rust Book) diventa più gestibile.
  • Utilizzo di Rust per vari tipi di progetti, incluso lo sviluppo di server web.