Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pacchetti, Crate, e Moduli

Quando scriverai programmi sempre più complessi, organizzare il tuo codice diventerà sempre più importante. Raccogliendo funzionalità correlate e separando il codice con caratteristiche distinte, chiarirai dove trovare il codice che implementa una particolare funzionalità e quindi dove guardare per modificare il codice di quella funzionalità se necessario.

I programmi che abbiamo scritto finora sono stati tutti implementati con un singolo modulo in un unico file. Man mano che un progetto cresce, dovresti organizzare il codice suddividendolo in più moduli e poi in più file. Un pacchetto (package) può contenere più crate binari (binary crate) e opzionalmente un crate libreria (library crate). Man mano che un pacchetto cresce, puoi estrarne parti in crate separate che diventeranno dipendenze esterne. Questo capitolo copre tutte queste tecniche. Per progetti molto grandi che comprendono un insieme di pacchetti interconnessi che evolvono insieme, Cargo fornisce degli spazi di lavoro (workspace), che tratteremo in “Cargo Workspace” nel Capitolo 14.

Discuteremo anche l’incapsulamento dei dettagli di implementazione, che ti consente di riutilizzare il codice a un livello più alto: una volta implementata un’operazione, l’altro codice può chiamare il tuo codice tramite la sua interfaccia pubblica senza dover sapere come funziona l’implementazione. Il modo in cui scrivi il codice definisce quali parti sono pubbliche per l’uso da parte di altri codici e quali parti sono dettagli di implementazione privati che ti riservi il diritto di modificare. Questo è un altro modo per limitare la quantità di dettagli che devi tenere a mente.

Un concetto correlato è lo scope: il contesto annidato in cui è scritto il codice ha un insieme di nomi definiti come “in scope”. Quando si legge, si scrive e si compila il codice, i programmatori e i compilatori devono sapere se un particolare nome in un particolare punto si riferisce a una variabile, funzione, struct, enum, modulo, costante o altro elemento e cosa significa quell’elemento. Puoi creare scope e modificare quali nomi sono in o fuori scope. Non puoi avere due elementi con lo stesso nome nello stesso scope; sono disponibili strumenti per risolvere i conflitti di nomenclatura.

Rust ha una serie di funzionalità che ti consentono di gestire l’organizzazione del tuo codice, inclusi i dettagli esposti, i dettagli privati e quali nomi sono in ogni scope nei tuoi programmi. Queste funzionalità, a volte definite collettivamente sistema dei moduli (module system), includono:

  • Pacchetti: Una funzionalità di Cargo che ti consente di costruire, testare e condividere crate
  • Crate: Un albero di moduli che produce una libreria o un eseguibile
  • Moduli e use: Ti consentono di controllare l’organizzazione, lo scope e la privacy dei percorsi (paths)
  • Path: Un modo per nominare un elemento, come una struct, una funzione o un modulo

In questo capitolo, tratteremo tutte queste funzionalità, discuteremo come interagiscono e spiegheremo come usarle per gestire lo scope. Alla fine, dovresti avere una solida comprensione del module system e essere in grado di lavorare con gli scope come un professionista!