Выпуск Rust 1.91

Objavljena je verzija programskog jezika Rust 1.91, koji je prvotno razvijen od strane Mozilla, a sada se razvija pod okriljem neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu upotrebu memorije i pruža sredstva za postizanje visoke paralelizacije izvršavanja zadataka, dok ne koristi sakupljač smeća i runtime (runtime se svodi na osnovno inicijaliziranje i održavanje standardne biblioteke).

Metode upravljanja memorijom u Rust-u oslobađaju developere od grešaka pri manipulaciji pokazivačima i štite od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskim područjima nakon njihova oslobađanja, dereferenciranje null pokazivača, izlazak izvan granica bafera, itd. Za distribuciju biblioteka, omogućavanje gradnje i upravljanje ovisnostima razvija se paket menadžer Cargo. Za hostovanje biblioteka podržava se repozitorij crates.io.

Sigurno upravljanje memorijom u Rust-u osigurano je tokom kompajliranja pomoću provjere referenci, praćenja vlasništva nad objektima, uzimanja u obzir vremena života objekata (vidljivost) i procjene ispravnosti pristupa memoriji tokom izvršavanja koda. Rust takođe pruža sredstva za zaštitu od prelivanja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije korišćenja, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli kao podrazumijevano, te nudi jaku statičku tipizaciju za minimiziranje logičkih grešaka.

Glavne novosti:

  • Poboljšana je podrška za 64-bitne ARM sisteme sa OS Windows. Ciljana platforma „aarch64-pc-windows-msvc“ je prebačena sa drugog na prvi nivo podrške. Osiguran je drugi nivo podrške za arhitekture aarch64-pc-windows-gnullvm i x86_64-pc-windows-gnullvm. Prvi nivo podrške podrazumeva formiranje binarnih build-ova, sprovođenje detaljnog testiranja i pružanje najviše garancije podrške platforme - svaka promena u prevodiocu se proverava izvršavanjem kompletnog testnog skupa. Drugi nivo podrške uključuje formiranje binarnih build-ova i garanciju build-a, ali ne garantuje prolazak testnog skupa. Treći nivo pokriva osnovnu podršku, ali bez automatizovanog testiranja, objavljivanja zvaničnih build-ova i provere mogućnosti build-a koda.
  • Dodano je lint upozorenje „dangling_pointers_from_locals“ za identifikaciju vraćanja funkcijama visećih raw pokazivača (dangling raw pointer), koji upućuju na podatke smeštene u lokalnim promenljivama definisanim u pozvanoj funkciji. Takve promenljive se uklanjaju nakon završetka funkcije, a raw pokazivači na podatke povezane sa tim promenljivama postaju viseći, tj. upućuju na oslobođenu memoriju. Naknadno dereferenciranje takvog pokazivača dovodi do neodređenog ponašanja. fn f() -> *const u8 { let x = 0; &x // upozorenje: proizvodit će se viseći pokazivač jer će lokalna promenljiva «x» biti uklonjena }
  • Dodano je lint upozorenje „integer_to_ptr_transmutes“, koje informiše o prebacivanju celih brojeva u pokazivače uz pomoć funkcije std::mem::transmute.
  • U paketnom menadžeru Cargo stabilizovana je podrška za parametar „build.build-dir“, koji definiše katalog za skladištenje privremenih gradbenih artefakata koje generišu cargo i rustc tokom faze izgradnje.
  • Za ABI sysv64, win64, efiapi in aapcs je bila stabilizirana podpora za deklaracijo funkcij s spremenljivo številom argumentov v slogu C.
  • Stabilizirana je podpora za inline-assembler za arhitekturo LoongArch32.
  • У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
    • 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}>
  • Priznak „const“ primenjen u funkcijama:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Komparator je bil posodobljen na vejo LLVM 21.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster