La libreria standard di Rust fornisce molte funzionalità utili, ma assume
che il sistema ospitante supporti varie caratteristiche: i thread, la rete,
l'allocazione su heap, e altre. Però, ci sono sistemi che non hanno
queste caratteristiche, e Rust può funzionare anche per tali sistemi!
Per farlo, diciamo a Rust che non vogliamo usare la libreria standard
tramite un attributo: #![no_std].
Nota: Questa caratteristica è tecnicamente stabile, ma ci sono alcune avvertenze. Per dirne una, con la versione stabile, si può costruire una libreria
#![no_std], ma non un programma. Per vedere i dettagli su come creare programmi senza la libreria standard, si veda il capitolo della versione notturna su#![no_std]
Per usare #![no_std], lo si aggiunga alla radice del proprio crate:
#![no_std] fn piu_uno(x: i32) -> i32 { x + 1 }
Molte delle funzionalità esposte nella libreria standard sono disponibili
anche tramire il crate core. Quando usiamo
la libreria standard, Rust automaticamente porta std nell'ambito corrente,
consentendo di usare le sue caratteristiche senza importazioni esplicite.
Per lo stesso motivo, quando si usa #![no_std], Rust porterà core
nell'ambito corrente, come pure il suo preludio. Ciò comporta che molto codice continuerà
a funzionare:
#![no_std] fn puo_fallire(fallimento: bool) -> Result<(), &'static str> { if fallimento { Err("non ha funzionato!") } else { Ok(()) } }