Rilascio del linguaggio di programmazione Rust 1.40

pubblicato rilascio del linguaggio di programmazione del sistema Ruggine 1.40fondato dal progetto Mozilla. Il linguaggio si concentra sulla gestione sicura della memoria, fornisce una gestione automatica della memoria e fornisce i mezzi per ottenere un elevato parallelismo dei lavori evitando l'uso di un garbage collector e 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:

  • Aggiunta la possibilità di contrassegnare strutture (struct) ed enumerazioni (enum con blocco Variant) utilizzando l'attributo "#[non_esaustivo]", Quale permette in futuro, aggiungere nuovi campi e opzioni alle strutture ed enumerazioni dichiarate. Ad esempio, gli sviluppatori di moduli che hanno strutture con campi dichiarati pubblicamente possono utilizzare "#[non_exhaustive]" per contrassegnare strutture a cui potrebbero essere aggiunti nuovi campi in futuro. Fino ad ora, in questa situazione, lo sviluppatore era costretto a scegliere tra la dichiarazione privata dei campi e il vincolo a un elenco immutabile di campi. Il nuovo attributo rimuove questa limitazione e consente di aggiungere nuovi campi in futuro senza il rischio di interrompere il codice esterno precedentemente compilato. Nei pacchetti crate, quando si abbinano le opzioni nella sezione “match”, è richiesta una definizione esplicita della maschera “_ => {...}” che copra possibili campi futuri, altrimenti verrà visualizzato un errore quando si aggiungono nuovi campi.
  • Aggiunto da la possibilità di chiamare la macro procedurale mac!() in un contesto di tipo. Ad esempio, ora puoi scrivere “type Foo = expand_to_type!(bar);” se “expand_to_type” è una macro procedurale.
  • Nei blocchi "extern { ... }". aggiunto la possibilità di utilizzare macro procedurali e di attributi, incluse le macro “bang!()”, ad esempio:

    macro_regole! make_item { ($nome:ident) => { fn $nome(); } }

    esterno {
    crea_oggetto!(alfa);
    crea_articolo!(beta);
    }

    esterno "C" {
    #[mia_identità_macro] fn foo();
    }

  • Nelle macro implementato capacità di generare elementi “macro_rules!”. Generazione di "macro_rules!" possibile sia nelle macro simili a funzioni (“mac!()”) che nelle macro sotto forma di attributi (“#[mac]”).
  • Nell'elemento di mappatura $m:meta aggiunto supporto per valori di enumerazione token arbitrari (“[TOKEN_STREAM]”, “{TOKEN_STREAM}” e “(TOKEN_STREAM)”), ad esempio:

    macro_regole! accetta_meta { ($m:meta) => {} }
    accetta_meta!( mio::percorso );
    accetta_meta!( my::path = "lit" );
    accetta_meta!( mio::percorso (abc));
    accetta_meta!( mio::percorso [abc]);
    accetta_meta!( mio::percorso { abc } );

  • Nella modalità Rust 2015, l'output degli errori è abilitato per i problemi identificati durante il controllo del prestito delle variabili (borrow checker) utilizzando la tecnica NLL (Non-Lexical Lifetimes). In precedenza, gli avvisi venivano sostituiti con errori durante l'esecuzione in modalità Rust 2018.
    Dopo che la modifica è stata estesa alla modalità Rust 2015, gli sviluppatori hanno finalmente potuto farlo fuggire dal vecchio controllore dei prestiti.

    Ricordiamo che il sistema di verifica basato su un nuovo meccanismo di presa in considerazione della durata delle variabili prese in prestito ha permesso di identificare alcuni problemi che passavano inosservati al vecchio codice di verifica. Poiché l'output degli errori per tali controlli potrebbe influire sulla compatibilità con il codice precedentemente funzionante, inizialmente venivano emessi avvisi invece di errori.

  • L'attributo “const”, che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato per la funzione is_power_of_two (per interi senza segno).
  • Una nuova parte dell'API è stata spostata nella categoria stabile, inclusa la macro todo!() e i metodi slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, sono stati stabilizzati.
    Opzione::as_deref, Opzione::as_deref_mut, Opzione::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes e {f32,f64}::from_ne_bytes.

  • Nel gestore pacchetti cargo
    implementato memorizzazione nella cache degli avvisi del compilatore su disco. Aggiunta l'opzione "metadati del carico" al comando "metadati del carico".--filter-piattaforma" per mostrare solo i pacchetti associati alla piattaforma di destinazione specificata nella colonna di risoluzione delle dipendenze. Aggiunta l'opzione di configurazione http.ssl-version per definire versioni TLS valide.
    Aggiunta la possibilità di pubblicare la sezione "dipendenze dello sviluppatore" senza specificare la chiave "versione".

  • Il compilatore rusticc fornisce supporto di terzo livello per le piattaforme di destinazione pollicev7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 e mips64el-unknown-linux-muslabi64. Il terzo livello prevede il supporto di base, ma senza test automatizzati e pubblicazione di build ufficiali.

Fonte: opennet.ru

Aggiungi un commento