Vydání Rust 1.91

Bylo zveřejněno vydání programovacího jazyka Rust 1.91, který byl původně vyvinut projektem Mozilla, ale nyní je vyvíjen pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečné manipulace s pamětí a poskytuje prostředky pro dosažení vysokého paralelismu při vykonávání úkolů, přičemž se obejde bez využití garbage collectoru a runtime (runtime se omezuje na základní inicializaci a údržbu standardní knihovny).

Metody práce s pamětí v Rustu zbavují vývojáře chyb při manipulaci s ukazateli a chrání před problémy, které vznikají z 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í bufferu atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí se vyvíjí balíčkový manažer Cargo. Pro hostování knihoven je k dispozici repozitář crates.io.

Bezpečné manipulace s pamětí jsou v Rustu zajištěny během kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, zohlednění doby života objektů (viditelnosti) a hodnocení správnosti přístupu k paměti při vykonávání kódu. Rust také poskytuje prostředky pro 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ě, aplikuje koncept neměnnosti (immutable) referencí a proměnných ve výchozím nastavení a nabízí silnou statickou typizaci pro minimalizaci logických chyb.

Hlavní novinky:

  • Byla zlepšena podpora 64bitových ARM systémů s operačním systémem Windows. Cílová platforma „aarch64-pc-windows-msvc“ byla převedena z druhé na první úroveň podpory. Druhá úroveň podpory byla zajištěna pro architektury aarch64-pc-windows-gnullvm a x86_64-pc-windows-gnullvm. První úroveň podpory zahrnuje formování binárních sestavení, důkladné testování a poskytování nejvyšší záruky podpory platformy — každá změna v kompilátoru je ověřena provedením kompletní testovací sady. Druhá úroveň podpory zahrnuje formování binárních sestavení a záruku sestavení, ale nezaručuje projití testovací sadou. Třetí úroveň zahrnuje základní podporu, ale bez automatizovaného testování, publikování oficiálních sestavení a ověřování možnosti sestavení kódu.
  • Bylo přidáno lint upozornění „dangling_pointers_from_locals“ pro odhalení funkcí vracejících visící raw ukazatele (dangling raw pointer), které ukazují na data uchovávaná v lokálních proměnných definovaných ve volané funkci. Tyto proměnné jsou odstraněny po ukončení funkce a raw ukazatele na související data se stávají visícími, tj. ukazují na uvolněnou paměť. Následné dereferencování takového ukazatele vede k nedefinovanému chování. fn f() -> *const u8 { let x = 0; &x // varování: vytvoří se visící ukazatel, protože lokální proměnná „x“ bude zrušena }
  • Bylo přidáno lint upozornění „integer_to_ptr_transmutes“, které informuje o převodu celých čísel na ukazatele pomocí funkce std::mem::transmute.
  • V balíčkovém systému Cargo byla stabilizována podpora parametru „build.build-dir“, který určuje adresář pro uchovávání dočasných sestavovacích artefaktů vytvářených cargo a rustc během fáze sestavení.
  • Pro ABI sysv64, win64, efiapi a aapcs byla stabilizována podpora pro deklaraci funkcí s proměnným počtem argumentů ve stylu C.
  • Byla stabilizována podpora inline assembleru pro architekturu LoongArch32.
  • Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
    • Path::file_prefix
    • AtomicPtr::fetch_ptr_add
    • AtomicPtr::fetch_ptr_sub
    • AtomicPtr::fetch_byte_add
    • AtomicPtr::fetch_byte_sub
    • AtomicPtr::fetch_or
    • AtomicPtr::fetch_and
    • AtomicPtr::fetch_xor
    • {integer}::strict_add
    • {integer}::strict_sub
    • {integer}::strict_mul
    • {integer}::strict_div
    • {integer}::strict_div_euclid
    • {integer}::strict_rem
    • {integer}::strict_rem_euclid
    • {integer}::strict_neg
    • {integer}::strict_shl
    • {integer}::strict_shr
    • {integer}::strict_pow
    • i{N}::strict_add_unsigned
    • i{N}::strict_sub_unsigned
    • i{N}::strict_abs
    • u{N}::strict_add_signed
    • u{N}::strict_sub_signed
    • PanicHookInfo::payload_as_str
    • core::iter::chain
    • u{N}::checked_signed_diff
    • core::array::repeat
    • PathBuf::add_extension
    • PathBuf::with_added_extension
    • Duration::from_mins
    • Duration::from_hours
    • impl PartialEq<str> for PathBuf
    • impl PartialEq<String> for PathBuf
    • impl PartialEq<str> for Path
    • impl PartialEq<String> for Path
    • impl PartialEq<PathBuf> for String
    • impl PartialEq<Path> for String
    • impl PartialEq<PathBuf> for str
    • impl PartialEq<Path> for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    • Cell::as_array_of_cells
    • u{N}::carrying_add
    • u{N}::borrowing_sub
    • u{N}::carrying_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl Debug for windows::ffi::EncodeWide<‘_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • impl Sum for Saturating<u{N}>
    • impl Sum<&Self> for Saturating<u{N}>
    • impl Product for Saturating<u{N}>
    • impl Product<&Self> for Saturating<u{N}>
  • Příznak „const“ byl použit ve funkcích:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Compiler updated to LLVM 21 branch.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster