Shopping cart

0

Cart

  • 0 item

Nessun prodotto nel carrello.

All categories

SE VUOI PRENDERE LA CERTIFICAZIONE PER QUESTO CORSO CLICCA QUI

Corso su Cargo Workspaces

Benvenuto al nostro corso su Cargo Workspaces!

Creare un Workspace

In precedenza, abbiamo costruito un pacchetto che includeva una crate binaria e una crate di libreria. Man mano che il tuo progetto cresce, potresti notare che la crate di libreria diventa sempre più grande e potresti voler dividere ulteriormente il tuo pacchetto in più crate di libreria. Cargo offre una funzionalità chiamata workspaces che può aiutare a gestire più pacchetti correlati sviluppati contemporaneamente.

Un workspace è un insieme di pacchetti che condividono lo stesso Cargo.lock e la stessa directory di output. Iniziamo creando un progetto utilizzando un workspace.

Creare un Workspace

Immagina di avere un progetto contenente una crate binaria e due crate di libreria. La crate binaria fornirà la funzionalità principale e dipenderà dalle due crate di libreria. Una crate di libreria fornirà una funzione add_one, mentre la seconda fornirà una funzione add_two. Queste tre crate faranno parte dello stesso workspace.

Per iniziare, creiamo una nuova directory per il nostro workspace e aggiungiamo un file Cargo.toml che configurerà l’intero workspace.

Costruire il Workspace

Dopo aver creato la struttura di base del nostro workspace, possiamo costruire il workspace eseguendo il comando cargo build. La directory del nostro workspace conterrà una directory target dove saranno collocati gli artefatti compilati.

Questo approccio di condivisione della directory target tra le crate ci permette di evitare compilazioni inutili, risparmiando tempo durante lo sviluppo.

Continueremo ad esplorare e ad approfondire le funzionalità dei Cargo Workspaces nel corso di questo modulo. Continua a seguirci per ulteriori dettagli!

Creazione del Secondo Pacchetto nel Workspace

Ora, procediamo a creare un altro pacchetto membro nel workspace e chiamiamolo add_one. Modifica il file Cargo.toml di livello superiore per specificare il percorso add_one nella lista dei membri:

File: Cargo.toml

toml

[workspace]

members = [
"adder",
"add_one",
]

Successivamente, generiamo una nuova crate di libreria chiamata add_one:

bash

$ cargo new add_one --lib
Creato il pacchetto della libreria `add_one`

Ora, la tua directory add dovrebbe avere queste directory e file:

css

├── Cargo.lock
├── Cargo.toml
├── add_one
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── target

Nel file add_one/src/lib.rs, aggiungiamo una funzione add_one:

File: add_one/src/lib.rs

rust

pub fn add_one(x: i32) -> i32 {
x + 1
}

Ora possiamo far dipendere il pacchetto adder con la nostra crate binaria dal pacchetto add_one che contiene la nostra libreria. Prima, dovremo aggiungere una dipendenza del percorso su add_one a adder/Cargo.toml.

File: adder/Cargo.toml

toml

[dependencies]
add_one = { path = "../add_one" }

Cargo non presume che le crate in un workspace dipendano l’una dall’altra, quindi dobbiamo essere espliciti sulle relazioni di dipendenza.

Successivamente, utilizziamo la funzione add_one (dalla crate add_one) nella crate adder. Apriamo il file adder/src/main.rs e aggiungiamo una riga di uso in alto per portare la nuova crate libreria add_one nello scope. Poi cambiamo la funzione main per chiamare la funzione add_one, come in Listing 14-7.

File: adder/src/main.rs

rust

use add_one;

fn main() {
let num = 10;
println!("Hello, world! {num} più uno è {}!", add_one::add_one(num));
}

Listing 14-7: Utilizzo della crate libreria add_one dalla crate adder

Costruiamo il workspace eseguendo cargo build nella directory di livello superiore add!

bash

$ cargo build
Compilazione add_one v0.1.0 (file:///projects/add/add_one)
Compilazione adder v0.1.0 (file:///projects/add/adder)
Terminato dev [non ottimizzato + informazioni di debug] target(s) in 0.68s

Per eseguire la crate binaria dalla directory add, possiamo specificare quale pacchetto nel workspace vogliamo eseguire usando l’argomento -p e il nome del pacchetto con cargo run:

bash

$ cargo run -p adder
Terminato dev [non ottimizzato + informazioni di debug] target(s) in 0.0s
Esecuzione `target/debug/adder`
Ciao, mondo! 10 più uno è 11!

Questo esegue il codice in adder/src/main.rs, che dipende dalla crate add_one.

Dipendenza da un Pacchetto Esterno in un Workspace

Nota che il workspace ha un solo file Cargo.lock al livello superiore, anziché avere un Cargo.lock in ogni directory di ciascuna crate. Ciò garantisce che tutte le crate utilizzino la stessa versione di tutte le dipendenze. Se aggiungiamo il pacchetto rand ai file adder/Cargo.toml e add_one/Cargo.toml, Cargo risolverà entrambi a una versione di rand e registrerà ciò nel singolo Cargo.lock. Fare in modo che tutte le crate nel workspace utilizzino le stesse dipendenze significa che le crate saranno sempre compatibili tra loro.

Considera di utilizzare un workspace: è più facile capire componenti più piccole e individuali rispetto a un unico grande blocco di codice. Inoltre, mantenere le crate in un workspace può facilitare il coordinamento tra crate se vengono spesso modificate contemporaneamente.

1 Comment

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *