Lingua di prugrammazione Rust versione 1.40

publicatu liberazione di lingua di prugrammazione di u sistema Ruggine 1.40, fundatu da u prughjettu Mozilla. A lingua si focalizeghja nantu à a sicurità di a memoria, furnisce una gestione automatica di a memoria, è furnisce strumenti per ottene un parallelismu elevatu di u travagliu senza usà un cullettore di basura è runtime.

A gestione automatica di a memoria di Rust libera u sviluppatore da a manipulazione di u puntatore è prutegge da i prublemi derivanti da a manipulazione di a memoria di livellu bassu, cum'è l'accessu à a memoria dopu, i dereferences di puntatori nulli, i buffer overruns, è simili. Un gestore di pacchetti hè sviluppatu per distribuisce biblioteche, assicurà l'assemblea è gestisce e dipendenze da u prugettu. Cargo, chì permette di ottene e librerie necessarie per u prugramma in un clic. Un repository hè supportatu per ospitare biblioteche crates.io.

menu innovazioni:

  • Aggiunta l'abilità di marcà strutture (struct) è enumerazioni (enum cù u bloccu Variant) usendu l'attributu "#[non_exhaustive]", chì si permette di in u futuru, aghjunghje novi campi è opzioni à strutture dichjarate è enumerazioni. Per esempiu, i sviluppatori di moduli chì anu strutture cù campi dichjarati publicamente ponu utilizà "#[non_exhaustive]" per marcà strutture chì ponu avè novi campi aghjuntu in u futuru. Finu à avà, in questa situazione, u sviluppatore era furzatu à sceglie trà dichjarà campi privati ​​​​è ubligatoriu à una lista immutable di campi. U novu attributu sguassate sta limitazione è permette di aghjunghje novi campi in u futuru senza u risicu di rompe u codice esterno compilatu prima. In i pacchetti di crate, quandu si currisponde à l'opzioni in a sezione "match", una definizione esplicita di a maschera "_ => {...}" hè necessaria, chì copre i pussibuli futuri campi, altrimenti un errore serà visualizatu quandu aghjunghje novi campi.
  • Aggiuntu l'abilità di chjamà a macro procedurale mac! () in un cuntestu tipu. Per esempiu, pudete avà scrive "type Foo = expand_to_type! (bar);" se "expand_to_type" hè una macro procedurale.
  • In blocchi "extern { ... }". aghjustatu l'abilità di utilizà macros procedurali è attributi, cumprese macros "bang! ()", per esempiu:

    macro_rules! make_item { ($name:ident) => { fn $name (); } }

    esternu {
    make_item!(alpha);
    make_item!(beta);
    }

    esternu "C" {
    #[my_identity_macro] fn foo();
    }

  • In macros implementatu capacità di generà elementi "macro_rules!". Generazione di "macro_rules!" pussibule sia in macros cum'è funzioni ("mac!()") è in macros in forma di attributi ("#[mac]").
  • In l'elementu $m:meta mapping aghjustatu supportu per i valori di enumerazione di token arbitrarii ("[TOKEN_STREAM]", "{TOKEN_STREAM}" è "(TOKEN_STREAM)"), per esempiu:

    macro_rules! accept_meta { ($m:meta) => {} }
    accettà_meta!( my::path );
    accettà_meta!( my::path = "lit" );
    accettà_meta!( my::path ( abc ) );
    accettà_meta!( my::path [ abc ] );
    accettà_meta!( my::path { abc } );

  • In u modu Rust 2015, l'output d'errore hè attivatu per i prublemi identificati quandu verificate u prestitu di variabili (verificatore di prestitu) cù a tecnica NLL (Non-Lexical Lifetimes). In precedenza, l'avvirtimenti sò stati rimpiazzati cù l'errori quandu si eseguiva in u modu Rust 2018.
    Dopu chì u cambiamentu hè statu allargatu à u modu Rust 2015, i sviluppatori anu pussutu infine aiutà da u vechju verificatore di prestitu.

    Ricurdemu chì u sistema di verificazione basatu annantu à un novu mecanismu per piglià in contu a durata di a vita di e variàbili prestitu, hà permessu di identificà certi prublemi chì passavanu inosservati da u vechju codice di verificazione. Siccomu l'output d'errore per tali cuntrolli puderia influenzà a cumpatibilità cù u codice di travagliu precedente, avvirtimenti sò stati inizialmente emessi invece di errori.

  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu per a funzione is_power_of_two (per integers unsigned).
  • Una nova parte di l'API hè stata spustata in a categuria stabile, cumprese a macro todo!() è a slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, i metudi sò stati stabilizati.
    Option::as_deref, Option::as_deref_mut, Option::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, è {f32,f64}::from_ne_bytes.

  • In u pacchettu gestore di carica
    implementatu cache avvisi di compilatore nantu à u discu. Aggiunta l'opzione "metadata di carica" ​​à u cumandamentu "metadata di carica".--filtru-piattaforma" per mostrà solu i pacchetti ligati à a piattaforma di destinazione specifica in a colonna di risoluzione di dependenza. Aggiunta l'opzione di cunfigurazione http.ssl-versione per definisce e versioni TLS valide.
    Aggiunta a capacità di publicà a sezione "dipendenze di u sviluppu" senza specificà a chjave "versione".

  • U compilatore rustc furnisce un supportu di terzu livellu per e piattaforme di destinazione thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 è mips64el-unknown-linux-muslabi64. U terzu livellu implica un supportu basicu, ma senza teste automatizate è publicazione di custruzzioni ufficiali.

Source: opennet.ru

Add a comment