Vydanie programovacieho jazyka Rust 1.47

Bolo zverejnené vydanie 1.47 programovacieho jazyka systému Rust, ktorý založil projekt Mozilla. Jazyk sa zameriava na bezpečnosť pamäte, poskytuje automatickú správu pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh bez použitia garbage collectora alebo runtime (runtime je zredukované na základnú inicializáciu a údržbu štandardnej knižnice).

Automatická správa pamäte Rust eliminuje chyby pri manipulácii s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencie nulového ukazovateľa, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, zabezpečenie montáže a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.

Hlavné inovácie:

  • Implementovaná podpora vlastností pre polia ľubovoľnej veľkosti. Predtým, kvôli neschopnosti definovať generické funkcie pre všetky celočíselné hodnoty, štandardná knižnica poskytovala vstavanú podporu vlastností iba pre polia s veľkosťou do 32 prvkov (vlastnosti pre každú veľkosť boli definované staticky). Vďaka vytvoreniu funkcie const generics bolo možné definovať generické funkcie pre akúkoľvek veľkosť poľa, ale ešte nie sú zahrnuté v stabilných vlastnostiach jazyka, hoci sú implementované v kompilátore a teraz sa používajú v štandardnej knižnici. pre typy polí ľubovoľnej veľkosti.
    Napríklad nasledujúci konštrukt v Rust 1.47 vytlačí obsah poľa, hoci predtým by to viedlo k chybe:

fnmain() {
nech xs = [0; 34];
println!("{:?}", xs);
}

  • Poskytovaný výstup kratších stôp (backtrace), výstup v núdzových situáciách. Prvky, ktoré vo väčšine situácií nie sú zaujímavé, ale rušia výstup a odvádzajú pozornosť od primárnych príčin problému, sú zo sledovania vylúčené. Ak chcete vrátiť úplné sledovanie, môžete použiť premennú prostredia "RUST_BACKTRACE=full". Napríklad pre kód

fnmain() {
panika!();
}

Predtým sa stopa vydávala v 23 stupňoch, ale teraz sa zredukuje na 3 stupne, čo vám umožní okamžite pochopiť podstatu:

vlákno 'main' spanikárilo pri 'explicit panic', src/main.rs:2:5
backtrace zásobníka:
0: std::panic::begin_panic
na /rustc/d…d75a/library/std/src/panicking.rs:497
1: ihrisko::hlavné
na ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
na /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Kompilátor rustc bol aktualizovaný na zostavenie pomocou LLVM 11 (Rust používa LLVM ako backend na generovanie kódu). Zároveň je zachovaná možnosť stavať pomocou starého LLVM až do verzie 8, ale štandardne (v rust-lang/llvm-project) sa teraz používa LLVM 11. Vydanie LLVM 11 sa očakáva v nadchádzajúcom dni.
  • Na platforme Windows poskytuje kompilátor rustc podporu pre umožnenie kontrol integrity riadiaceho toku (Control Flow Guard), aktivovaných pomocou príznaku „-C control-flow-guard“. Na iných platformách je tento príznak zatiaľ ignorovaný.
  • Nová časť API bola prenesená do stabilnej kategórie, vrátane stabilizovaných Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU a f64::TAU.
  • Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa v metódach:
    • nové pre všetky celé čísla iné ako nula;
    • check_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub a saturating_mul pre všetky celé čísla;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunkcia, is_ascii_graphic, is_ascii_whitespace a is_ascii_control pre typy char a u8.
  • Pre FreeBSD sa používa súprava nástrojov z FreeBSD 11.4 (FreeBSD 10 nepodporuje LLVM 11).

Prevzaté z opennet.ru

Zdroj: linux.org.ru

Pridať komentár