Vydání programovacího jazyka Rust 1.73

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.73, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečnost paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Metody zpracování 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ého zpracování paměti, 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, poskytování sestavení 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.

Bezpečnost paměti je v Rustu zajištěna v době kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, sledování životnosti objektů (rozsahů) a hodnocení správnosti přístupu do paměti během provádění kódu. Rust také poskytuje ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.

Hlavní inovace:

  • Formát zpráv vydávaných výchozí obslužnou rutinou pádu programu (panika) byl přepracován. Text zadaný v makru „panic!“ se nyní zobrazuje na samostatném řádku bez uvozovek, což usnadňuje čtení zprávy a eliminuje zmatek, pokud jsou přítomny vnořené uvozovky nebo jsou rozděleny na více řádků. fn main() { let soubor = "ferris.txt"; panika!("no ne! {soubor:?} nenalezen!"); } Bylo tam vlákno 'main' zpanikařilo z 'ach ne! 'ferris.txt' nebyl nalezen!', src/main.rs:3:5 Vlákno 'main' zpanikařilo na src/main.rs:3:5: ach ne! "ferris.txt" nebyl nalezen!

    Přepracován byl také výstup zpráv zobrazovaných při spuštění maker „assert_eq“ a „assert_ne“. fn main() { sustain_eq!("🦀", "🐟", "ferris není ryba"); } Vlákno 'main' zpanikařilo při 'tvrzení selhalo: `(vlevo == vpravo)` vlevo: `"🦀"`, vpravo: `"🐟"`: ferris není ryba', src/main.rs: 2:5 vlákno 'main' zpanikařilo na src/main.rs:2:5: tvrzení `left == right` selhalo: ferris není ryba vlevo: “🦀” vpravo: “🐟”

  • V souladu s RFC 3184 byla přidána možnost přímo manipulovat s klíči úložiště LocalKey s místním vláknem (thread_local). > a LocalKey > pomocí metod get(), set(), take() a replace() namísto použití uzávěru "with(|inner| ...)", což eliminuje potřebu dalšího inicializačního kódu pro výchozí nastavení hodnoty zadané pro nová vlákna při použití makra „thread_local!“ thread_local! { statické VĚCI: Buňka > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // se stalo VĚCI.set(vec![3, 1, 2]); // ... // bylo ponecháno v = THINGS.with(|i| i.take()); // stal se let v: Vec = VĚCI.take(); }
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • Nesignováno {integer}::div_ceil
    • Bez znaménka {integer}::next_multiple_of
    • Bez znaménka {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Místní klíč:: >::získat
    • Místní klíč:: >::set
    • Místní klíč:: >::vezměte
    • Místní klíč:: >::nahradit
    • Místní klíč:: >::s_půjčkou
    • Místní klíč:: >::with_borrow_mut
    • Místní klíč:: >::set
    • Místní klíč:: >::vezměte
    • Místní klíč:: >::nahradit
  • Atribut "const", který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá ve funkcích:
    • rc::Slabý::nový
    • synchronizace::Slabá::nová
    • NonNull::as_ref
  • Kompilátor poskytuje záznam informací o verzi v sekci „.comment“, podobně jako GCC a Clang.
  • Třetí úroveň podpory byla implementována pro platformy aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl a x86_64-unknown-unknown-unknown-android. -ohos. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, publikování oficiálních sestavení nebo kontroly, zda lze kód sestavit.
  • Byla implementována druhá úroveň podpory pro cílovou platformu wasm32-wasi-preview1-threads. Druhý stupeň podpory zahrnuje záruku montáže.

Zdroj: opennet.ru

Přidat komentář