00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Crate e Cargo in Rust

Cargo è il build system e package manager ufficiale di Rust. I crate sono le unità di compilazione e distribuzione del codice Rust.

Cos’è un Crate

Un crate può essere di due tipi:

  • Binary crate: produce un eseguibile, ha una funzione main()
  • Library crate: fornisce funzionalità riutilizzabili, non ha main()
# Crea un binary crate
cargo new mio_progetto

# Crea un library crate
cargo new mia_libreria --lib

Struttura del Progetto

mio_progetto/
├── Cargo.toml          # Configurazione del progetto
├── Cargo.lock          # Versioni esatte delle dipendenze
├── src/
│   ├── main.rs         # Entry point (binary)
│   └── lib.rs          # Entry point (library)
├── tests/              # Test di integrazione
├── benches/            # Benchmark
└── examples/           # Esempi

Cargo.toml

[package]
name = "mio_progetto"
version = "0.1.0"
edition = "2024"
authors = ["Nome <email@esempio.com>"]
description = "Descrizione del progetto"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
rand = "0.8"

[dev-dependencies]
criterion = "0.5"

[build-dependencies]
cc = "1.0"

Aggiungere Dipendenze

# Aggiunge una dipendenza
cargo add serde

# Con features specifiche
cargo add serde --features derive

# Versione specifica
cargo add tokio@1.0 --features full

# Solo per sviluppo
cargo add --dev criterion

Comandi Principali di Cargo

cargo build             # Compila il progetto (debug)
cargo build --release   # Compila ottimizzato (release)
cargo run               # Compila ed esegue
cargo test              # Esegue i test
cargo check             # Controlla errori senza compilare (veloce)
cargo doc --open        # Genera e apre la documentazione
cargo fmt               # Formatta il codice
cargo clippy            # Linting avanzato
cargo update            # Aggiorna le dipendenze
cargo publish           # Pubblica su crates.io

Features

Le features permettono compilazione condizionale:

[features]
default = ["json"]
json = ["serde_json"]
xml = ["quick-xml"]
full = ["json", "xml"]
#[cfg(feature = "json")]
pub mod json_support {
    pub fn parse(data: &str) { /* ... */ }
}

Workspace

Per progetti con più crate correlati:

# Cargo.toml nella root
[workspace]
members = [
    "core",
    "cli",
    "server",
]

Crates.io

crates.io è il registro ufficiale per condividere crate. Per pubblicare:

cargo login              # Login con token API
cargo publish --dry-run  # Verifica prima di pubblicare
cargo publish            # Pubblica il crate

Conclusione

Cargo è uno degli strumenti più apprezzati dell’ecosistema Rust. Gestisce in modo integrato compilazione, dipendenze, testing, documentazione e pubblicazione. Il sistema di crate e il registro crates.io facilitano la condivisione e il riutilizzo del codice nella comunità Rust.