Rilascio del linguaggio di programmazione Rust 1.36

pubblicato rilascio del linguaggio di programmazione del sistema Ruggine 1.36, fondato dal progetto Mozilla. Il linguaggio si concentra sulla sicurezza della memoria, fornisce la gestione automatica della memoria e fornisce un mezzo per ottenere un elevato parallelismo delle attività senza utilizzare un garbage collector o un runtime.

La gestione automatica della memoria di Rust libera lo sviluppatore dalla manipolazione dei puntatori e protegge dai problemi derivanti dalla manipolazione della memoria di basso livello, come accessi alla memoria after-free, dereferenziazioni di puntatori nulli, sovraccarichi del buffer e simili. È in fase di sviluppo un gestore di pacchetti per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze del progetto. ufficio, che ti consente di ottenere le librerie necessarie per il programma in un clic. È supportato un repository per ospitare le librerie casse.io.

Il principale innovazioni:

  • Tratto stabilizzato Futuro, che rappresenta un valore la cui valutazione potrebbe non essere ancora stata completata durante l'utilizzo dei blocchi async/.await. I valori asincroni definiti utilizzando Future consentono di continuare a eseguire il lavoro utile nel thread, attendendo contemporaneamente il completamento dei calcoli di un determinato valore;
  • Biblioteca stabilizzata allocare, che fornisce puntatori e raccolte intelligenti per la gestione dei valori allocati in memoria. L'allocazione della memoria in std ora utilizza il tipo Una cosa, che vengono riesportati dall'alloc. L'uso separato di alloc ha senso nelle applicazioni non legate a std (“#![no_std]”), così come nelle librerie progettate per l'uso in programmi simili senza std;
  • Per ignorare controlla la corretta inizializzazione dei valori proposto tipo intermedio ForseUnità, che può essere utilizzato al posto della funzione mem::uninitialized come alternativa più sicura. La funzione mem::uninitialized è comoda per creare velocemente array, ma fuorvia il compilatore perché sembra essere inizializzata, ma in realtà il valore rimane non inizializzato. MaybeUninit consente di indicare esplicitamente al compilatore che il valore non è inizializzato, di tenere conto del possibile comportamento indefinito associato a questo, e anche di organizzare controlli nei programmi tramite "forse_t:" e l'inizializzazione passo passo, segnandone il completamento utilizzando la chiamata ".assume_init()". Con l'avvento di MaybeUninit, la funzione mem::uninitialized è stata deprecata e non se ne consiglia l'uso;
  • La tecnica NLL (Non-Lexical Lifetimes), che ha ampliato il sistema per registrare la durata delle variabili prese in prestito, è stata stabilizzata per il linguaggio Rust 2015 (inizialmente, NLL era supportato solo da Rust 2018). Invece di impegnare la durata a livello lessicale, NLL lo fa a livello dell'insieme di puntatori nel grafico del flusso di esecuzione. Questo approccio consente di aumentare la qualità del controllo del prestito delle variabili (borrow checker) e consentire l'esecuzione di alcuni tipi di codice corretto, il cui utilizzo in precedenza portava a un errore. Il nuovo comportamento rende inoltre molto più semplice il debug;
  • Nuova implementazione di array associativi inclusa Mappa hash, in base all'applicazione della struttura Tavola svizzera (caricato automaticamente hashbrown::HashMap, se non diversamente specificato, come std::HashMap, che è basato su SipHash 1-3). L'interfaccia software rimane la stessa e le differenze evidenti allo sviluppatore si riducono a prestazioni migliorate e consumo di memoria ridotto;
  • Nel gestore pacchetti cargo aggiunto l'opzione “--offline”, che consente il funzionamento senza accedere alla rete, in cui durante l'installazione delle dipendenze vengono utilizzati solo i pacchetti memorizzati nella cache del sistema locale. Se la dipendenza non è nella cache locale, verrà generato un errore. Per precaricare le dipendenze nella cache locale prima di andare offline, puoi utilizzare il comando “cargo fetch”;
  • Implementata la possibilità di richiamare la macro “dbg!” indicare diversi argomenti;
  • Per i metodi viene utilizzato l'attributo “const”, che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti
    Layout::from_size_align_unchecked,
    mem::necessità_drop,
    NonNull::pendente e
    NonNull::cast;

  • Una nuova porzione di API è stata trasferita nella categoria stabile, inclusi i metodi che sono stati stabilizzati
    compito::Waker, compito::Sondaggio,
    VecDeque::ruota_sinistra, VecDeque::ruota_destra,
    Leggi::leggi_vettoriale, Scrivi::scrivi_vettoriale,
    Iteratore::copiato,
    BorrowMut (per stringhe) e str::as_mut_ptr.

Fonte: opennet.ru

Aggiungi un commento