PRIMO CORSO ITALIANO SUL NUOVISSIMO LINGUAGGIO DI PROGRAMMAZIONE
CERTIFICATO COMPRESO
Corso Totalmente Online con Certificazione. Segui Quando vuoi 24h/24h 7/7
Benvenuto nel corso introduttivo al linguaggio di programmazione Rust. Rust ti aiuta a scrivere software più veloce e affidabile. Nella progettazione dei linguaggi di programmazione, l’ergonomia ad alto livello e il controllo a basso livello spesso sono in contrasto; Rust sfida questo conflitto. Bilanciando la potente capacità tecnica e un’ottima esperienza per lo sviluppatore, Rust ti offre l’opzione di controllare dettagli a basso livello (come l’uso della memoria) senza tutti i fastidi tradizionalmente associati a tale controllo.
Chi Usa Rust
Rust è ideale per molte persone per una varietà di motivi. Vediamo alcuni dei gruppi più importanti.
Team di Sviluppatori
Rust si sta dimostrando uno strumento produttivo per la collaborazione tra grandi team di sviluppatori con diversi livelli di conoscenza della programmazione di sistema. Il codice a basso livello è incline a vari bug sottili, che nella maggior parte degli altri linguaggi possono essere individuati solo attraverso test approfonditi e una rigorosa revisione del codice da parte di sviluppatori esperti. In Rust, il compilatore svolge il ruolo di guardiano rifiutando di compilare il codice con questi bug sfuggenti, inclusi bug di concorrenza. Lavorando insieme al compilatore, il team può dedicare il proprio tempo alla logica del programma anziché inseguire bug.
Rust porta anche strumenti contemporanei per lo sviluppatore nel mondo della programmazione di sistema:
- Cargo, il gestore delle dipendenze e strumento di compilazione incluso, rende l’aggiunta, la compilazione e la gestione delle dipendenze indolore e coerente nell’ecosistema di Rust.
- Lo strumento di formattazione Rustfmt assicura uno stile di codifica coerente tra gli sviluppatori.
- Il server del linguaggio Rust alimenta l’integrazione dell’Ambiente di Sviluppo Integrato (IDE) per il completamento del codice e i messaggi di errore inline.
Utilizzando questi e altri strumenti nell’ecosistema di Rust, gli sviluppatori possono essere produttivi mentre scrivono codice di livello di sistema.
Studenti
Rust è per gli studenti e coloro che sono interessati a conoscere i concetti di sistema. Utilizzando Rust, molte persone hanno imparato argomenti come lo sviluppo di sistemi operativi. La comunità è molto accogliente e felice di rispondere alle domande degli studenti. Attraverso sforzi come questo corso, i team di Rust vogliono rendere i concetti di sistema più accessibili a più persone, specialmente a coloro che sono nuovi alla programmazione.
Aziende
Centinaia di aziende, grandi e piccole, utilizzano Rust in produzione per una varietà di compiti, tra cui strumenti da riga di comando, servizi web, strumenti DevOps, dispositivi embedded, analisi e transcodifica audio e video, criptovalute, bioinformatica, motori di ricerca, applicazioni Internet delle cose, apprendimento automatico e persino parti importanti del browser web Firefox.
Sviluppatori Open Source
Rust è per le persone che vogliono costruire il linguaggio di programmazione Rust, la comunità, gli strumenti per lo sviluppatore e le librerie. Saremmo lieti di averti come contributore al linguaggio Rust.
Persone che Valorizzano Velocità e Stabilità
Rust è per le persone che bramano velocità e stabilità in un linguaggio. Per velocità, intendiamo sia quanto rapidamente può eseguire il codice Rust sia la velocità con cui Rust ti consente di scrivere programmi. I controlli del compilatore Rust garantiscono la stabilità attraverso l’aggiunta di funzionalità e il refactoring. Questo è in contrasto con il codice legacy fragile nei linguaggi senza questi controlli, che gli sviluppatori spesso temono di modificare. Mirando a astrazioni a costo zero, funzionalità di livello superiore che compilano in codice di livello inferiore altrettanto velocemente del codice scritto manualmente, Rust si impegna a rendere il codice sicuro anche veloce.
Il linguaggio Rust spera di supportare molti altri utenti; quelli menzionati qui sono solo alcuni dei principali interessati. Nel complesso, l’ambizione più grande di Rust è eliminare i compromessi che i programmatori hanno accettato da decenni fornendo sicurezza e produttività, velocità ed ergonomia. Dai a Rust una possibilità e vedi se le sue scelte funzionano per te.
Per chi è Questo Corso
Questo corso presuppone che tu abbia scritto codice in un altro linguaggio di programmazione ma non fa alcuna ipotesi su quale. Abbiamo cercato di rendere il materiale ampiamente accessibile a coloro con una vasta gamma di background di programmazione. Non dedichiamo molto tempo a parlare di cosa sia la programmazione o come pensarla. Se sei completamente nuovo alla programmazione, sarebbe meglio per te leggere un corso che fornisce specificamente un’introduzione alla programmazione.
Come Usare Questo Corso
In generale, questo corso presuppone che lo stai leggendo in sequenza da davanti a dietro. I capitoli successivi si basano su concetti dei capitoli precedenti, e i capitoli precedenti potrebbero non approfondire dettagli su un particolare argomento ma torneranno sull’argomento in un capitolo successivo.
Troverai due tipi di capitoli in questo corso: capitoli di concetto e capitoli di progetto. Nei capitoli di concetto, imparerai su un aspetto di Rust. Nei capitoli di progetto, costruiremo insieme piccoli programmi, applicando ciò che hai imparato fino ad ora. I capitoli 2, 12 e 20 sono capitoli di progetto; gli altri sono capitoli di concetto.
Il Capitolo 1 spiega come installare Rust, come scrivere un programma “Ciao, mondo!” e come usare Cargo, il gestore delle dipendenze e strumento di compilazione di Rust. Il Capitolo 2 è un’introduzione pratica alla scrittura di un programma in Rust, costruendo un gioco di indovinare numeri. Qui copriamo concetti a un livello alto, e i capitoli successivi forniranno dettagli aggiuntivi. Se vuoi sporcarti subito le mani, il Capitolo 2 è il posto giusto. Il Capitolo 3 copre le funzionalità di Rust simili a quelle di altri linguaggi di programmazione, e nel Capitolo 4 imparerai sul sistema di proprietà di Rust. Se sei un apprendista particolarmente meticoloso che preferisce imparare ogni dettaglio prima di passare al successivo, potresti voler saltare il Capitolo 2 e passare direttamente al Capitolo 3, tornando al Capitolo 2 quando vuoi lavorare su un progetto applicando i dettagli che hai imparato.
Il Capitolo 5 discute di strutture e metodi, e il Capitolo 6 copre le enumerazioni, le espressioni di corrispondenza e il costrutto di controllo if let. Userai strutture ed enumerazioni per creare tipi personalizzati in Rust.
Nel Capitolo 7, imparerai sul sistema di moduli di Rust e sulle regole di privacy per organizzare il tuo codice e la sua Interfaccia di Programmazione Applicativa (API) pubblica. Il Capitolo 8 discute alcune strutture di dati di raccolta comuni fornite dalla libreria standard, come vettori, stringhe e mappe hash. Il Capitolo 9 esplora la filosofia e le tecniche di gestione degli errori di Rust.
Il Capitolo 10 si addentra in generici, tratti e durate, che ti danno il potere di definire codice che si applica a tipi multipli. Il Capitolo 11 tratta del testing, che anche con le garanzie di sicurezza di Rust è necessario per garantire la correttezza della logica del tuo programma. Nel Capitolo 12, costruiremo la nostra implementazione di una sottoinsieme di funzionalità dallo strumento da riga di comando grep che cerca testo all’interno di file. Per questo, useremo molti dei concetti di cui abbiamo discusso nei capitoli precedenti.
Il Capitolo 13 esplora chiusure ed iteratori: caratteristiche di Rust che provengono dai linguaggi di programmazione funzionale. Nel Capitolo 14, esamineremo Cargo in modo più dettagliato e parleremo delle migliori pratiche per condividere le tue librerie con gli altri. Il Capitolo 15 discute dei puntatori intelligenti forniti dalla libreria standard e dei tratti che ne abilitano la funzionalità.
Nel Capitolo 16, affronteremo diversi modelli di programmazione concorrente e parleremo di come Rust ti aiuta a programmare in più thread senza paura. Il Capitolo 17 guarda a come gli idiom di Rust si confrontano con i principi della programmazione orientata agli oggetti con cui potresti essere familiare.
Il Capitolo 18 è un riferimento sui modelli e la corrispondenza di modelli, che sono modi potenti di esprimere idee in tutta la programmazione di Rust. Il Capitolo 19 contiene una varietà di argomenti avanzati di interesse, inclusi Rust non sicuro, macro e altro ancora su durate, tratti, tipi, funzioni e chiusure.
Nel Capitolo 20, completeremo un progetto in cui implementeremo un server web multithread a basso livello!
Infine, alcune appendici contengono informazioni utili sul linguaggio in un formato più simile a un riferimento. L’Appendice A copre le parole chiave di Rust, l’Appendice B copre gli operatori e i simboli di Rust, l’Appendice C copre i tratti derivabili forniti dalla libreria standard, l’Appendice D copre alcuni utili strumenti di sviluppo, e l’Appendice E spiega le edizioni di Rust. Nell’Appendice F, puoi trovare le traduzioni del corso, e nell’Appendice G parleremo di come Rust è realizzato e cosa è Rust notturno.
Non c’è un modo sbagliato per leggere questo corso: se vuoi saltare avanti, fallo! Potresti dover tornare indietro ai capitoli precedenti se incontri confusione. Ma fai ciò che funziona per te.
Una parte importante del processo di apprendimento di Rust è imparare a leggere i messaggi di errore che il compilatore visualizza: questi ti guideranno verso un codice funzionante. Pertanto, forniremo molti esempi che non compilano insieme al messaggio di errore che il compilatore ti mostrerà in ogni situazione. Sappi che se inserisci e esegui un esempio casuale, potrebbe non compilare! Assicurati di leggere il testo circostante per vedere se l’esempio che stai cercando di eseguire è destinato a dare errore. Ferris ti aiuterà anche a distinguere il codice che non è destinato a funzionare:
- Ferris con un punto interrogativo: Questo codice non si compila!
- Ferris che alza le mani: Questo codice va in panico!
- Ferris con una chele alzata, scuotendo le spalle: Questo codice non produce il comportamento desiderato.
Nella maggior parte delle situazioni, ti guideremo verso la versione corretta di qualsiasi codice che non si compila.
Curriculum
- 20 Sections
- 78 Lessons
- Lifetime
- Modulo 14
- Modulo 23
- Modulo 3: Concetti di programmazione comuniQuesto capitolo tratta i concetti che appaiono in quasi tutti i linguaggi di programmazione e come funzionano in Rust. Molti linguaggi di programmazione hanno molto in comune nel loro nucleo. Nessuno dei concetti presentati in questo capitolo è unico per Rust, ma li discuteremo nel contesto di Rust e spiegheremo le convenzioni sull'uso di questi concetti. In particolare, imparerà a conoscere le variabili, i tipi di base, le funzioni, i commenti e il flusso di controllo. Queste basi saranno presenti in ogni programma Rust, e impararle presto le darà una base solida da cui partire.5
- 3.0Corso di Programmazione Rust Lezione 008 – Variabili e mutabilità
- 3.1Corso di Programmazione Rust Lezione 009 – Tipi di Dati
- 3.2Corso di Programmazione Rust Lezione 010 – Funzioni
- 3.3Corso di Programmazione Rust Lezione 011 – Commenti
- 3.4Corso di Programmazione Rust Lezione 012 – Control Flow (Controllo del Flusso)
- Modulo 4: Capire la ProprietàLa proprietà è la caratteristica più unica di Rust e ha profonde implicazioni per il resto del linguaggio. Permette a Rust di garantire la sicurezza della memoria senza bisogno di un garbage collector, quindi è importante capire come funziona la proprietà. In questo capitolo parleremo della proprietà e di diverse funzioni correlate: il prestito, le fette e il modo in cui Rust dispone i dati in memoria.4
- Modulo 5: Utilizzare le strutture per strutturare i dati correlatiUna struct, o struttura, è un tipo di dati personalizzato che le consente di raggruppare e nominare più valori correlati che costituiscono un gruppo significativo. Se ha familiarità con un linguaggio orientato agli oggetti, una struct è come gli attributi dei dati di un oggetto. In questo capitolo, confronteremo e contrapporremo le tuple con le struct, per approfondire le conoscenze già acquisite e dimostrare quando le struct sono un modo migliore per raggruppare i dati. Dimostreremo come definire e istanziare le strutture. Parleremo di come definire le funzioni associate, in particolare il tipo di funzioni associate chiamate metodi, per specificare il comportamento associato a un tipo di struct. Le strutture e gli enum (discussi nel Capitolo 6) sono i mattoni per la creazione di nuovi tipi nel dominio del suo programma, per sfruttare appieno il controllo di tipo in tempo di compilazione di Rust.3
- Modulo 6: Enum e corrispondenza dei modelli3
- Modulo 7: Gestione di progetti in crescita con pacchetti, casse e moduli5
- 7.0Corso di Programmazione Rust Lezione 023 – Pacchetti e casse
- 7.1Corso di Programmazione Rust Lezione 024 – Definizione di moduli per controllare l’ambito e la privacy
- 7.2Corso di Programmazione Rust Lezione 025 – Percorsi per fare riferimento a un elemento nella struttura del modulo
- 7.3Corso di Programmazione Rust Lezione 026 – Portare i percorsi nell’ambito di applicazione con la parola chiave use
- 7.4Corso di Programmazione Rust Lezione 027 – Separare i moduli in file diversi
- Modulo 8: Collezioni comuni3
- Modulo 9: Gestione degli errori3
- Modulo 10: Tipi generici, tratti e durata di vita3
- Modulo 11: Scrivere test automatizzati3
- Modulo 12: Un progetto I/O: Costruire un programma a riga di comando6
- 12.0Corso di Programmazione Rust Lezione 040 – Accettare gli argomenti della riga di comando
- 12.1Corso di Programmazione Rust Lezione 041 – Lettura di un File
- 12.2Corso di Programmazione Rust Lezione 042 – Rifattorizzazione per migliorare la modularità e la gestione degli errori
- 12.3Corso di Programmazione Rust Lezione 043 – Sviluppare la funzionalità della Biblioteca con lo Sviluppo guidato dai test
- 12.4Corso di Programmazione Rust Lezione 044 – Lavorare con le variabili d’ambiente
- 12.5Corso di Programmazione Rust Lezione 045 – Scrivere i messaggi di errore nell’Errore Standard invece che nell’Uscita Standard
- Modulo 13: Caratteristiche del linguaggio funzionale: Iteratori e chiusure4
- 13.0Corso di Programmazione Rust Lezione 046 – Chiusure: Funzioni anonime che catturano l’ambiente in cui si trovano.
- 13.1Corso di Programmazione Rust Lezione 047 – Elaborazione di una serie di elementi con gli iteratori
- 13.2Corso di Programmazione Rust Lezione 048 – Migliorare il nostro progetto I/O
- 13.3Corso di Programmazione Rust Lezione 049 – Confronto delle prestazioni: Loops vs. Iteratori
- Modulo 14: Maggiori informazioni su Cargo e Crates.io5
- 14.0Corso di Programmazione Rust Lezione 050 – Personalizzazione delle build con i profili di rilascio
- 14.1Corso di Programmazione Rust Lezione 051 – Pubblicare una Crate su Crates.io
- 14.2Corso di Programmazione Rust Lezione 052 – Spazi di lavoro Cargo
- 14.3Corso di Programmazione Rust Lezione 053 – Installazione di binari da Crates.io con cargo install
- 14.4Corso di Programmazione Rust Lezione 054 – Estensione di Cargo con comandi personalizzati
- Modulo 15: Puntatori intelligenti6
- 15.0Corso di Programmazione Rust Lezione 055 – Utilizzo di Box per puntare ai dati sull’Heap
- 15.1Corso di Programmazione Rust Lezione 056 – Trattare i puntatori intelligenti come riferimenti regolari con il tratto Deref
- 15.2Corso di Programmazione Rust Lezione 057 – Esecuzione del codice in fase di pulizia con il tratto Drop
- 15.3Corso di Programmazione Rust Lezione 058 – Rc, il puntatore intelligente contato dai riferimenti
- 15.4Corso di Programmazione Rust Lezione 059 – RefCell e il modello di mutabilità interna
- 15.5Corso di Programmazione Rust Lezione 060 – I cicli di riferimento possono perdere memoria
- Modulo 16: Concorrenza senza paura4
- 16.0Corso di Programmazione Rust Lezione 061 – Utilizzo dei thread per l’esecuzione simultanea del codice
- 16.1Corso di Programmazione Rust Lezione 062 – Utilizzo del Message Passing per trasferire i dati tra i thread
- 16.2Corso di Programmazione Rust Lezione 063 – Concorrenza a stati condivisi
- 16.3Corso di Programmazione Rust Lezione 064 – Concorrenza estensibile con i tratti Sync e Send
- Modulo 17: Caratteristiche della programmazione orientata agli oggetti di Rust3
- 17.0Corso di Programmazione Rust Lezione 065 – Caratteristiche dei linguaggi orientati agli oggetti
- 17.1Corso di Programmazione Rust Lezione 066 – Utilizzo di oggetti di tipo Trait che consentono valori di tipo diverso
- 17.2Corso di Programmazione Rust Lezione 067 – Implementazione di un modello di design orientato agli oggetti
- Modulo 18: Modelli e abbinamenti3
- Modulo 19: Caratteristiche avanzate5
- 19.0Corso di Programmazione Rust Lezione 071 – Unsafe Rust
- 19.1Corso di Programmazione Rust Lezione 072 – Tratti avanzati
- 19.2Corso di Programmazione Rust Lezione 073 – Tipi avanzati
- 19.3Corso di Programmazione Rust Lezione 074 – Funzioni e chiusure avanzate
- 19.4Corso di Programmazione Rust Lezione 075 – Le macro
- Modulo 20: Progetto finale: Costruire un server web multithreaded3