Moziilla projekti alusel arendatud ja praegu iseseisva mittetulundusorganisatsiooni Rust Foundationi haldamine alla kuuluv programmeerimiskeel Rust 1.91 on avaldatud. Keele fookus on mĂ€lutööde ohutuse tagamisel ning see pakub vahendeid kĂ”rge ĂŒlesannete samaaegse tĂ€itmise saavutamiseks, samas kasutamata prĂŒgikoristajat ja runtime'i (runtime piirdub pĂ”hiinitialiseerimise ja standardteegi toetamisega).
MÀluga töötamise meetodid Rust'is vabastavad arendajad pointerite manipulatsiooni vigadest ja kaitsevad neid probleemide eest, mis tulenevad madala taseme mÀlu haldamisest, nagu mÀlualale pÀrast selle vabastamist juurdepÀÀs, null-pointerite dereferentseerimine, puhverserveri piiridest vÀljumine jne. Raamatukogude levitamiseks, kokkupaneku tagamiseks ja sÔltuvuste haldamiseks arendatakse paketihaldurit Cargo. Raamatukogude majutamiseks toetatakse repoturite crates.io.
MĂ€luhĂŒgieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jĂ€lgimise, objektide eluaja (vaateala) arvestamise ja mĂ€lule juurdepÀÀsu korrektuse hindamise kaudu koodi tĂ€itmise ajal. Rust pakub ka vahendeid tĂ€isarvude ĂŒlevoolude vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mĂ”istet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade vĂ€hendamiseks.
Peamised uuendused:
- 64-bitiste ARM-sĂŒsteemide toetust Windowsi operatsioonisĂŒsteemiga on parandatud. Sihtplatvorm «aarch64-pc-windows-msvc» on tĂ”stetud teiselt toetasemelt esimeseks. Arhitektuuride aarch64-pc-windows-gnullvm ja x86_64-pc-windows-gnullvm jaoks on tagatud teine toetaseme tase. Esimene toetaseme tase tĂ€hendab binaarselt kogumiste genereerimist, pĂ”hjalikku testimist ja platvormi kĂ”rgeima toetuse tagamist â iga muudatus kompilaatoris kontrollitakse tĂ€iendava testikomplekti kĂ€ivitamisega. Teine toetaseme tase hĂ”lmab binaarselt kogumite genereerimist ja kogumise tagamise garantii andmist, kuid ei garanteeri testikomplekti lĂ€bimist. Kolmas toetaseme tase katab baastoetuse, kuid ilma automatiseeritud testimise, ametlike kogumite avaldamise ja koodi kogumise vĂ”imaluse kontrollimiseta.
- Lisatud lint-hoiatuse «dangling_pointers_from_locals» funktsioonide viidatud raw-viidete (dangling raw pointer) tagastamise tuvastamiseks, mis viitavad kohalikele muutujatele, mis on mÀÀratud kutset teinud funktsioonis. Sellised muutujad kustutatakse pÀrast funktsiooni lÔpetamist ning sealsete muutujate andmetele viitavad raw-viidud muutuvad rippuvateks, st viitavad vabastatud mÀlule. Sellise viidu jÀrgmine dereferentseerimine pÔhjustab mÀÀramatut kÀitumist. fn f() -> *const u8 { let x = 0; &x // hoiatus: rippuv viid on genereeritud, kuna kohalik muutuja «x» kustutatakse }
- Lisatud lint-hoiatus «integer_to_ptr_transmutes», mis teavitab tÀisarvude teisendamisest viidete jaoks funktsiooni std::mem::transmute abil.
- Pakihalduris Cargo on stabiliseeritud parameetri «build.build-dir» tugi, mis mÀÀrab kausta ajutiste ehitusartefaktide sÀilitamiseks, mille cargo ja rustc genereerivad ehitusprotsessi kÀigus.
- ABI sysv64, win64, efiapi ja aapcs jaoks on stabiliseeritud funktsioonide deklareerimise tugi, millel on muutuva arvu argumente C keeles.
- LoongArch32 arhitektuuri jaoks on stabiliseeritud inline-assembleri tugi.
- Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒbispetsiifikatsioonide rakendused:
- 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}>
- MĂ€rgis âconstâ on rakendatud funktsioonides:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Koojalikator on uuendatud LLVM 21 haru versiooniks.
Allikas: opennet.ru
