Vydání programovacího jazyka Rust 1.47

Byla zveřejněna verze 1.47 programovacího jazyka systému Rust, založeného projektem 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í garbage collectoru nebo runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Automatická správa paměti Rust eliminuje chyby při manipulaci s ukazateli a chrání před problémy vyplývajícími z manipulace s pamětí na nízké úrovni, jako je přístup k oblasti paměti po jejím uvolnění, dereference nulového ukazatele, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, zajištění sestavování a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.

Hlavní inovace:

  • Implementována podpora vlastností pro pole libovolné velikosti. 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í funkce const generics bylo možné definovat generické funkce pro libovolnou velikost pole, ale ještě nejsou zahrnuty ve stabilních funkcích jazyka, ačkoli jsou implementovány v kompilátoru a nyní se používají ve standardní knihovně pro typy polí 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 bylo trasování vydáváno ve 23 stupních, ale nyní bude redukováno na 3 stupně, což 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 (Rust používá LLVM jako backend pro generování kódu). Současně je zachována schopnost stavět se starým LLVM až do verze 8, ale standardně (v rust-lang/llvm-project) se nyní používá LLVM 11. Vydání LLVM 11 se očekává v nadcházející dní.
  • 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 stabilní kategorie, včetně 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.
  • 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 se používá sada nástrojů z FreeBSD 11.4 (FreeBSD 10 nepodporuje LLVM 11).

Převzato z opennet.ru

Zdroj: linux.org.ru

Přidat komentář