Vydanie Rust 1.91

Bol vydaný nový release programovacieho jazyka Rust 1.91, ktorý bol pôvodne založený projektom Mozilla, ale v súčasnosti je rozvíjaný pod patronátom nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnú prácu s pamäťou a poskytuje prostriedky na dosiahnutie vysokého paralelizmu vykonávania úloh, pričom sa zaobíde bez použitia garbage collectora a runtime (runtime sa obmedzuje na základnú inicializáciu a podporu štandardnej knižnice).

Metódy práce s pamäťou v Rust zbavujú vývojára chýb pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú z nízkoúrovňovej práce s pamäťou, ako je prístup do oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, prekročenie hraníc bufra atď. Na distribúciu knižníc, zabezpečenie zostavy a správu závislostí sa vyvíja balíčkový manažér Cargo. Pre umiestnenie knižníc sa podporuje repozitár crates.io.

Bezpečné zaobchádzanie s pamäťou je v Rust zabezpečené už pri kompilácii prostredníctvom kontroly odkazov, sledovania vlastníctva objektov, zohľadňovania životnosti objektov (rozsah viditeľnosti) a posudzovania správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred celočíselnými pretečeniami, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolené a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.

Hlavné novinky:

  • Zlepšila sa podpora 64-bitových ARM systémov s OS Windows. Cieľová platforma „aarch64-pc-windows-msvc“ bola prehodnotená z druhej úrovne na prvú úroveň podpory. Poskytovaná je druhá úroveň podpory pre architektúry aarch64-pc-windows-gnullvm a x86_64-pc-windows-gnullvm. Prvá úroveň podpory zahŕňa vytváranie binárnych zostáv, dôkladné testovanie a zaručenie najvyššej podpory platformy — každá zmena v kompilátore je overovaná vykonaním kompletného testovacieho súboru. Druhá úroveň podpory zahŕňa vytváranie binárnych zostáv a záruku zostavy, ale nezaručuje úspešné absolvovanie testovacieho súboru. Tretia úroveň pokrýva základnú podporu, ale bez automatizovaného testovania, publikovania oficiálnych zostáv a overovania možnosti zostaviť kód.
  • Pridané lint upozornenie „dangling_pointers_from_locals“ na identifikáciu vrátenia visiacich raw ukazovateľov (dangling raw pointer) z funkcií, ktoré odkazujú na dáta uložené v lokálnych premenných definovaných vo volanej funkcii. Takéto premenné sú odstránené po dokončení funkcie a raw ukazovatele na súvisiace dáta sa stávajú visiacimi, to znamená, že odkazujú na uvoľnenú pamäť. Následné dereferencovanie takéhoto ukazovateľa vedie k nedefinovanému správaniu. fn f() -> *const u8 { let x = 0; &x // warning: a dangling pointer will be produced because the local variable „x“ will be dropped }
  • Pridané lint upozornenie „integer_to_ptr_transmutes“, ktoré informuje o prevode celých čísel na ukazovatele pomocou funkcie std::mem::transmute.
  • V balíkovom manažéri Cargo bola stabilizovaná podpora parametra „build.build-dir“, ktorý určuje adresár na ukladanie dočasných zostavovacích artefaktov vytváraných cargo a rustc počas zostavovania.
  • Pre ABI sysv64, win64, efiapi a aapcs bola stabilizovaná podpora pre deklaráciu funkcií s premenným počtom argumentov v štýle C.
  • Bola stabilizovaná podpora inline-assemblera pre architektúru LoongArch32.
  • Do oblasti stabilných bol prenesený nový balík API, vrátane stabilizovaných metód a implementácií traitov:
    • 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}>
  • Príznak „const“ bol použitý v funkciách:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Kompilátor bol aktualizovaný na vetvu LLVM 21.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster