Vydání programovacího jazyka Rust 1.66

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.66, 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:

  • Ve výčtech s celočíselnými reprezentacemi (atribut "#[repr(Int)]" je povoleno explicitní označení diskriminantu (číslo varianty ve výčtu), i když výčet obsahuje pole. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Přidána funkce core::hint::black_box, která jednoduše vrací přijatou hodnotu. Protože si kompilátor myslí, že tato funkce něco dělá, lze funkci black_box použít k deaktivaci optimalizací kompilátoru pro smyčky při provádění testování výkonu kódu nebo při zkoumání generovaného strojového kódu (takže kompilátor kód nepovažuje za nepoužívaný a neodstraní jej). Například v níže uvedeném příkladu black_box(v.as_ptr()) zabraňuje kompilátoru, aby si myslel, že vektor v není použit. použijte std::hint::black_box; fn push_cap(v: &mut Vec) { pro i v 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Správce balíčků "cargo" nabízí příkaz "remove", který umožňuje z příkazového řádku odstranit závislosti z manifestu Cargo.toml.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Přidejte implementace AsFd pro typy zámků stdio při použití WASI.
    • impl TryFrom > pro Box<[T; N]>
    • core::hint::black_box
    • Trvání::try_from_secs_{f32,f64}
    • Možnost::rozbalit
    • std::os::fd
  • V šablonách jsou povoleny rozsahy "..X" a "..=X".
  • Při sestavování frontendu kompilátoru rustc a backendu LLVM se používají optimalizační režimy LTO (Link Time Optimization) a BOLT (Binary Optimization and Layout Tool), aby se zvýšil výkon výsledného kódu a snížila spotřeba paměti.
  • Implementována podpora úrovně 5 pro platformy armv5te-none-eabi a thumbvXNUMXte-none-eabi. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, publikování oficiálních sestavení a kontroly schopnosti sestavit kód.
  • Přidána podpora pro propojení s obecnými knihovnami macOS.

Navíc si můžeme všimnout zahrnutí front-endového kompilátoru jazyka Rust (gccrs) do kódové základny GCC. Frontend je součástí větve GCC 13, která bude vydána v květnu 2023. Počínaje GCC 13 bude možné použít standardní sadu nástrojů GCC ke kompilaci programů Rust bez nutnosti instalovat kompilátor rustc vytvořený pomocí vývoje LLVM. Implementace Rust v GCC 13 bude ve stavu beta, ve výchozím nastavení není povolena.

Zdroj: opennet.ru

Přidat komentář