Utgivningen av programmeringssprÄket Rust 1.91 har offentliggjorts, utvecklat av Mozilla men nu under ledning av den oberoende, ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder verktyg för att uppnÄ hög parallellism i uppgiftsutförande, utan att anvÀnda en skrÀpares (garbage collector) och runtime (runtime handlar om grundlÀggande initialisering och underhÄll av standardbiblioteket).
Minneshanteringsmetoderna i Rust skyddar utvecklare frÄn att göra fel vid manipulering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minnesarbete, sÄsom att komma Ät minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, etc. För distribution av bibliotek, byggande och hantering av projektberoenden utvecklas paketförvaltaren Cargo. För lagring av bibliotek stöds ett repository pÄ crates.io.
SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga nyheter:
- Stöd för 64-bitars ARM-system med Windows har förbĂ€ttrats. MĂ„lplattformen "aarch64-pc-windows-msvc" har uppgraderats frĂ„n andra till första stödnivĂ„. Andra stödnivĂ„er har tillhandahĂ„llits för arkitekturerna aarch64-pc-windows-gnullvm och x86_64-pc-windows-gnullvm. Första stödnivĂ„n innebĂ€r att binĂ€rbyggnader skapas, grundlig testning utförs och högsta garantin för plattformsstöd ges â varje Ă€ndring i kompilatorn verifieras genom att hela testuppsĂ€ttningen körs. Andra stödnivĂ„n innebĂ€r skapande av binĂ€rbyggnader och garanti för byggnad, men garanterar inte att testuppsĂ€ttningen passerar. Tredje nivĂ„ omfattar grundlĂ€ggande stöd, men utan automatiserad testning, offentliggörande av officiella byggnader och kontroll av kodens byggbarhet.
- Ett lint-varning "dangling_pointers_from_locals" har lagts till för att identifiera funktioner som returnerar hÀngande raw-pekar (dangling raw pointer) som pekar pÄ data som lagras i lokala variabler definierade i den kallade funktionen. Dessa variabler tas bort efter att funktionen Àr klar, och raw-pekar som pekar pÄ data relaterade till dessa variabler blir hÀngande, det vill sÀga pekar pÄ frigjord minne. En efterföljande dereferering av en sÄdan pekare leder till oförutsÀgbart beteende. fn f() -> *const u8 { let x = 0; &x // varning: en hÀngande pekare kommer att skapas eftersom den lokala variabeln «x» kommer att tas bort }
- Ett lint-varning "integer_to_ptr_transmutes" har lagts till som informerar om konvertering av heltal till pekare med funktionen std::mem::transmute.
- I paketförvaltaren Cargo har stödet för parametern "build.build-dir" stabiliserats, vilken definierar katalogen för lagring av temporÀra byggarbetsprodukter som skapas av cargo och rustc under byggfasen.
- För ABI sysv64, win64, efiapi och aapcs stabiliserad stöd för funktioner med ett variabelt antal argument i C-stil.
- Stabiliserad stöd för inline-assembler för LoongArch32-arkitekturen.
- En ny uppsÀttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
- 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}>
- Indikatorn "const" har tillÀmpats i funktioner:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Kompilatorn har uppdaterats till LLVM 21.
KĂ€lla: opennet.ru
