rilascio del linguaggio di programmazione di sistema , sviluppato dal progetto Mozilla. Il linguaggio è focalizzato su un uso sicuro della memoria, fornisce gestione automatica della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, evitando l'uso di garbage collector e runtime.
La gestione automatica della memoria in Rust libera gli sviluppatori dalla manipolazione dei puntatori e protegge da problemi derivanti da operazioni a basso livello con la memoria, come l'accesso a memoria già liberata, dereferenziazione di puntatori nulli, overflow del buffer e simili. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, è in fase di sviluppo un gestore di pacchetti , che consente di ottenere le librerie necessarie per il programma con un clic. Per l'hosting delle librerie è supportato il repository .
Principali :
- Nel compilatore rustc supporto per l'ottimizzazione basata sui risultati del profilo di esecuzione del codice (PGO, Profile-Guided Optimization),
che consente di generare codice più ottimizzato basato sull'analisi delle statistiche accumulate durante l'esecuzione del programma. Per generare il profilo è previsto il flag «-C profile-generate», mentre per utilizzare il profilo durante la compilazione si utilizza «-C profile-use» (inizialmente il programma viene compilato con il primo flag, eseguito e, dopo la creazione del profilo, si compila nuovamente con il secondo flag); - Quando si esegue il comando «cargo run», utile per un rapido testing delle applicazioni console, è stata aggiunta la possibilità di selezione automatica del file eseguibile da avviare, nel caso in cui ci siano più file eseguibili nel pacchetto. Il file eseguibile predefinito è determinato tramite la direttiva default-run nella sezione [package] con i parametri del pacchetto, il che permette di evitare di specificare esplicitamente il nome del file tramite il flag «—bin» in ogni esecuzione di «cargo run»;
- Nel gestore di pacchetti Cargo è integrato il comando «cargo vendor», precedentemente fornito come . Il comando consente di gestire il lavoro con una copia locale delle dipendenze: dopo aver eseguito "cargo vendor", tutto il codice sorgente delle dipendenze del progetto viene scaricato da crates.io in una directory locale, che poi può essere utilizzata per lavorare senza fare riferimento a crates.io (dopo l'esecuzione del comando viene visualizzato un suggerimento per modificare la configurazione al fine di utilizzare la directory durante le compilazioni). Questa funzionalità è già utilizzata per organizzare la distribuzione del compilatore rustc, confezionando tutte le dipendenze in un unico archivio con la release;
- È stata introdotta la possibilità di creare riferimenti a varianti di enumerazioni (enum) utilizzando alias di tipo (ad esempio, nel corpo della funzione "fn increment_or_zero(x: ByteOption) è possibile specificare "ByteOption::None => 0"), costruzioni per la deduzione dei tipi (‹MyType‹..››::varianti => N) oppure riferimenti a Self (nei blocchi con &self si può indicare "Self::Quarter => 25");
- È stata aggiunta la possibilità di creare costanti non denominate nei macro. Invece di definire il nome dell'elemento in "const", ora è possibile utilizzare il simbolo "_" per scegliere dinamicamente un identificatore unico, evitando conflitti di nomi durante il richiamo ripetuto del macro;
- È stata aggiunta la possibilità di utilizzare l'attributo «#[repr(align(N))» con le enumerazioni (enums), utilizzando una sintassi simile alla definizione della struttura AlignN‹T› con allineamento e successivo utilizzo di AlignN‹MyEnum›;
- Una nuova serie di API è stata stabilizzata, inclusi i metodi BufReader::buffer, BufWriter::buffer,
Cell::from_mut,
Cell::as_slice_of_cells,
DoubleEndedIterator::nth_back,
Option::xor,
{i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits e
slice::copy_within.
Inoltre, si può notare progetto , che offre una versione asincrona della libreria standard di Rust (porting della libreria std, dove tutte le interfacce sono disponibili in una versione asincrona e pronte per l'uso con la sintassi async/await).
Fonte: opennet.ru
