Rilascio del linguaggio di programmazione Rust 1.36

Pubblicato rilascio del linguaggio di programmazione di sistema Rust 1.36, 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 Cargo, che consente di ottenere le librerie necessarie per il programma con un clic. Per l'hosting delle librerie è supportato il repository crates.io.

Principali novità:

  • Tipologia stabilizzata (trait) Future, che rappresenta un valore il cui calcolo potrebbe non essere ancora completato durante l'utilizzo dei blocchi async / .await. I valori asincroni definiti tramite Future consentono di continuare l'esecuzione in un thread di lavoro utile, aspettando nel contempo il completamento del calcolo di un valore specifico;
  • Libreria stabilizzata alloc, che fornisce puntatori intelligenti e collezioni per gestire i valori allocati in memoria. Per l'allocazione della memoria ora si utilizza il tipo Vec, ri-espportato da alloc. L'uso separato di alloc ha senso in applicazioni non legate a std ("#![no_std]"), così come nelle librerie progettate per essere utilizzate in tali programmi senza std;
  • Per bypassare i controlli di corretta inizializzazione dei valori designato tipo intermedio MaybeUninit, che può essere utilizzata al posto della funzione mem::uninitialized come una sua alternativa più sicura. La funzione mem::uninitialized è comoda per la creazione rapida di array, ma inganna il compilatore, poiché crea l'illusione di inizializzazione, mentre in realtà il valore rimane non inizializzato. MaybeUninit permette di indicare esplicitamente al compilatore che il valore non è inizializzato, considerando il comportamento indefinito associato e consentendo, nei programmi, di organizzare controlli attraverso «maybe_t:» e inizializzazioni graduali, contrassegnando il loro completamento tramite la chiamata «.assume_init()». Con l'arrivo di MaybeUninit, la funzione mem::uninitialized è stata considerata obsoleta e non è più raccomandata per l'uso;
  • La tecnica NLL (Non-Lexical Lifetimes), che ha ampliato il sistema di gestione del ciclo di vita delle variabili borrowate, è stata stabilizzata per il linguaggio Rust 2015 (inizialmente NLL era supportato solo da Rust 2018). Invece di vincolare il ciclo di vita a livello lessicale, NLL gestisce la durata a livello di set di puntatori nel grafo di esecuzione. Questo approccio consente di migliorare la qualità del controllo del borrowing delle variabili e di consentire l'esecuzione di alcuni tipi di codice corretto che in precedenza portavano a errori. Il nuovo comportamento semplifica notevolmente anche il debug;
  • È stata inclusa una nuova implementazione degli array associativi HashMap, basata sull'uso della struttura Swiss Table (caricata automaticamente hashbrown::HashMap, se non diversamente specificato, come ad esempio std::HashMap, che si basa su SipHash 1-3). L'interfaccia del software è rimasta la stessa, mentre le differenze significative per gli sviluppatori si traducono in un aumento delle prestazioni e in una riduzione del consumo di memoria;
  • Nel gestore pacchetti cargo aggiunta l'opzione «—offline», che include la modalità di lavoro senza connessione, in cui durante l'installazione delle dipendenze vengono utilizzati solo i pacchetti memorizzati nella cache locale. Se una dipendenza non è presente nella cache locale, verrà visualizzato un errore. Per pre-caricare le dipendenze nella cache locale prima di passare alla modalità offline, è possibile utilizzare il comando «cargo fetch»;
  • È stata realizzata la possibilità di chiamare il macro «dbg!» specificando più argomenti;
  • Il flag «const», che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, è stato applicato ai metodi
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling e
    NonNull::cast;
  • È stata tradotta una nuova serie di API in categoria stabile, compresi i metodi stabilizzati
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (per le stringhe) e str::as_mut_ptr.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster