Vydání programovacího jazyka Rust 1.47

zveřejněno vydání 1.47 systémového programovacího jazyka Rez, kterou založil projekt Mozilla. Jazyk se zaměřuje na bezpečnost paměti, poskytuje automatickou správu paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh bez použití Popelář и runtime (runtime se scvrkává na základní inicializaci a údržbu standardní knihovny).

Automatická správa paměti Rust šetří vývojáře před chybami při manipulaci s ukazateli a chrání před problémy, které vznikají v důsledku nízkoúrovňové manipulace s pamětí, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí projekt vyvíjí správce balíčků Náklad. Hostitelské knihovny podporují úložiště crates.io.

hlavní inovace:

  • Implementována podpora typů pole libovolná velikost. Dříve kvůli nemožnosti definovat generické funkce pro všechny celočíselné hodnoty poskytovala standardní knihovna vestavěnou podporu vlastností pouze pro pole do velikosti 32 prvků (vlastnosti pro každou velikost byly definovány staticky). Díky vytvoření funkcionality konstantních generik („const generics“) bylo možné definovat generické funkce pro libovolnou velikost pole, ale zatím nejsou zahrnuty ve vlastnostech stabilního jazyka, i když jsou implementovány v kompilátoru a jsou Nyní zapojený ve standardní knihovně pro vlastnosti pole libovolné velikosti.

    Například následující konstrukce v Rustu 1.47 vytiskne obsah pole, ačkoli dříve by to vedlo k chybě:

    fn main() {
    nechť xs = [0; 34];

    println!("{:?}", xs);
    }

  • Poskytovaný výstup kratších tras (backtrace), výstup v nouzových situacích. Prvky, které ve většině situací nejsou zajímavé, ale ruší výstup a odvádějí pozornost od primárních příčin problému, jsou ze sledování vyloučeny. Chcete-li vrátit úplné trasování, můžete použít proměnnou prostředí "RUST_BACKTRACE=full". Například pro kód

    fn main() {
    panika!();
    }

    Dříve byla stopa vydávána ve 23 fázích, ale nyní bude redukována na
    3 kroky, které vám umožní okamžitě pochopit podstatu:

    vlákno 'main' zpanikařilo při 'explicit panic', src/main.rs:2:5
    backtrace zásobníku:
    0: std::panic::begin_panic
    na /rustc/d…d75a/library/std/src/panicking.rs:497
    1: hřiště::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 byl aktualizován na sestavení pomocí LLVM 11 (Rez použití LLVM jako backend pro generování kódu). Zároveň je zachována možnost stavět se staršími LLVM až do verze 8, ale ve výchozím nastavení (v rust-lang/llvm-project) nyní používá LLVM 11. Vydání LLVM 11 se očekává v nadcházejících dnech.
  • Na platformě Windows poskytuje kompilátor rustc podporu pro povolení kontrol integrity řídicího toku (Control Flow Guard), aktivovaných pomocí příznaku „-C control-flow-guard“. Na jiných platformách je tento příznak prozatím ignorován.
  • Nová část API byla převedena do kategorie stabilních, včetně stabilizovaných
    Ident::new_raw,
    Rozsah::is_empty,
    RangeInclusive::is_empty,
    Výsledek::as_deref,
    Výsledek::as_deref_mut,
    Vec::únik,
    ukazatel::offset_from,
    f32::TAU a
    f64::TAU.

  • Atribut „const“, který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá v metodách:
    • nové pro všechna celá čísla jiná než nula;
    • check_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub a saturating_mul pro všechna celá čísla;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunkce, is_ascii_graphic, is_ascii_whitespace a is_ascii_control pro typy char a u8.
  • Pro FreeBSD zapojený toolkit z FreeBSD 11.4 (FreeBSD 10 nepodporuje LLVM 11).

Zdroj: opennet.ru

Přidat komentář