Vydanie programovacieho jazyka Rust 1.40

publikovaný vydanie systémového programovacieho jazyka Hrdza 1.40, ktorú založil projekt Mozilla. Jazyk sa zameriava na bezpečnosť pamäte, poskytuje automatickú správu pamäte a poskytuje nástroje na dosiahnutie vysokého paralelizmu úloh bez použitia zberača odpadu a runtime.

Automatická správa pamäte Rust oslobodzuje vývojára od manipulácie s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako sú napríklad prístupy do pamäte po uvoľnení, dereferences nulového ukazovateľa, pretečenie vyrovnávacej pamäte a podobne. Vyvíja sa správca balíkov na distribúciu knižníc, zabezpečenie zostavenia a správu závislostí v rámci projektu. náklad, čo vám umožní získať knižnice potrebné pre program jedným kliknutím. Hostiteľské knižnice podporujú úložisko crates.io.

Hlavné inovácie:

  • Pridaná možnosť označovať štruktúry (struct) a enumerácie (enum s blokom Variant) pomocou atribútu "#[non_exhaustive]", ktorý umožňuje v budúcnosti pridajte nové polia a možnosti do deklarovaných štruktúr a enumerácií. Napríklad vývojári modulov, ktoré majú štruktúry s verejne deklarovanými poľami, môžu použiť „#[non_exhaustive]“ na označenie štruktúr, do ktorých môžu byť v budúcnosti pridané nové polia. Doteraz bol v tejto situácii vývojár nútený vybrať si medzi súkromným deklarovaním polí a viazaním na nemenný zoznam polí. Nový atribút odstraňuje toto obmedzenie a umožňuje vám v budúcnosti pridávať nové polia bez rizika prelomenia predtým skompilovaného externého kódu. V balíkoch prepraviek sa pri porovnávaní možností v sekcii „zhoda“ vyžaduje explicitná definícia masky „_ => {...}“, ktorá pokrýva možné budúce polia, inak sa pri pridávaní nových polí zobrazí chyba.
  • Pridané schopnosť volať procedurálne makro mac!() v kontexte typu. Teraz môžete napríklad napísať „type Foo = expand_to_type!(bar);“, ak je „expand_to_type“ procedurálne makro.
  • V blokoch "extern { ... }" pridané schopnosť používať procedurálne a atribútové makrá vrátane makier „bang!()“, napríklad:

    makro_pravidlá! make_item { ($meno:ident) => { fn $meno(); } }

    externé {
    make_item!(alpha);
    make_item!(beta);
    }

    externé "C" {
    #[moja_identita_makro] fn foo();
    }

  • V makrách implementovaná schopnosť generovať prvky „macro_rules!“. Generuje sa "macro_rules!" možné ako v makrách podobných funkciám („mac!()“), ako aj v makrách vo forme atribútov („#[mac]“).
  • V prvku mapovania $m:meta pridané podpora pre ľubovoľné hodnoty enumerácie tokenov („[TOKEN_STREAM]“, „{TOKEN_STREAM}“ a „(TOKEN_STREAM)“), napríklad:

    makro_pravidlá! accept_meta { ($m:meta) => {} }
    prijať_meta!( moja::cesta );
    prijmi_meta!( moja::cesta = "svieti" );
    prijať_meta!( moja::cesta ( abc ) );
    prijať_meta!( moja::cesta [ abc ] );
    prijať_meta!( moja::cesta { abc } );

  • V režime Rust 2015 je povolený chybový výstup pre problémy identifikované pri kontrole výpožičiek premenných (kontrola výpožičiek) pomocou techniky NLL (Non-Lexical Lifetimes). Predtým boli upozornenia pri spustení v režime Rust 2018 nahradené chybami.
    Po rozšírení zmeny na režim Rust 2015 sa vývojári konečne dočkali zbaviť sa zo starej požičovne.

    Pripomeňme, že overovací systém založený na novom mechanizme zohľadňovania životnosti vypožičaných premenných umožnil identifikovať niektoré problémy, ktoré si starý overovací kód nevšimol. Keďže chybový výstup pre takéto kontroly by mohol ovplyvniť kompatibilitu s predtým fungujúcim kódom, namiesto chýb sa pôvodne vydávali varovania.

  • Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa pre funkciu is_power_of_two (pre celé čísla bez znamienka).
  • Nová časť API bola presunutá do stabilnej kategórie, vrátane makra todo!() a slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metódy boli stabilizované.
    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_32bajty, {f64,f32}::to_be_bytes, f64}::from_be_bytes, {f32,f64}::from_le_bytes a {fXNUMX,fXNUMX}::from_ne_bytes.

  • V správcovi balíkov náklad
    implementovaná ukladanie upozornení kompilátora na disk. Do príkazu „metadáta nákladu“ bola pridaná možnosť „metatadáta nákladu“.--platforma filtra", aby sa v stĺpci rozlíšenia závislostí zobrazili iba balíky viazané na zadanú cieľovú platformu. Pridaná možnosť konfigurácie verzie http.ssl na definovanie platných verzií TLS.
    Pridaná možnosť publikovať sekciu "dev-dependencies“ bez zadania kľúča „verzia“.

  • Kompilátor rustc poskytuje podporu tretej úrovne pre cieľové platformy thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 a mips64el-unknown-linux-muslabi64. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania a zverejňovania oficiálnych verzií.

Zdroj: opennet.ru

Pridať komentár