Avalikkus on toimunud programmeerimiskeele Rust 1.91 versioon, mis loodi Mozilla projekti raames, kuid mida arendab nüüd sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mäluga ohutule töötamisele ja pakub vahendeid ülesannete kõrgete paralleelsuse saavutamiseks, vältides samas prügilate ja runtime'i kasutamist (runtime piirdub põhihaldamise ja standardsete raamatukogude hooldamisega).
Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.
Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.
Põhilised uuendused:
- Parandatud 64-bitiste ARM-süsteemide toetamist Windowsi opsüsteemi jaoks. Sihtplatvorm "aarch64-pc-windows-msvc" on viidud teise toetasemelt esimesse. Aarch64-pc-windows-gnullvm ja x86_64-pc-windows-gnullvm arhitektuuride jaoks tagatakse teine toetaseme tase. Esimene tase tähendab binaarsüsteemide loomist, põhjalikku testimist ja maksimaalset garantii platvormi toele — iga muudatus kompilaatoris kontrollitakse täieliku testkomplekti käivitamisega. Teine tase hõlmab binaarsüsteemide loomist ja koostamise garantiid, kuid ei garanteeri testkomplekti läbimist. Kolmas tase hõlmab põhitoetust, kuid ilma automaatse testimise, ametlike versioonide avaldamise ja koodi koostamise kontrollimiseta.
- Lisatud lint-hoiatust „dangling_pointers_from_locals“, et tuvastada funktsioonide, mis tagastavad viitamatud raw-viidikud, mis viitavad andmetele, mis on salvestatud kutsutud funktsioonis määratud kohalikesse muutujatesse. Sellised muutujad eemaldatakse pärast funktsiooni lõppu ja raw-viidikud, mis osutavad nende muutujatega seotud andmetele, muutuvad viidatud, st viitavad vabastatud mälule. Edasine de-refereerimine sellist viidikut toob kaasa määramata käitumise. fn f() -> *const u8 { let x = 0; &x // hoiatamine: tekib viitatu viidik, kuna kohalik muutuja «x» kustutatakse }
- Lisatud lint-hoiatust „integer_to_ptr_transmutes“, mis teavitab täisarvude muutmisest viidikuteks funktsiooniga std::mem::transmute.
- Pakihalduris Cargo stabiliseeriti parameetri „build.build-dir“ tugi, mis määratleb katalooge ajutiste kogumise artefaktide hoidmiseks, mis loodakse cargo ja rustc kogumise etapis.
- ABI sysv64, win64, efiapi ja aapcs stabiliseeriti funktsoonide kuulutamise tugi, mis toetavad muutuva arvu argumente C-stiilis.
- Stabiliseeriti inline-assembleri tugi LoongArch32 arhitektuuri jaoks.
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide 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 for PathBuf
- impl PartialEq for PathBuf
- impl PartialEq for Path
- impl PartialEq for Path
- impl PartialEq for String
- impl PartialEq for String
- impl PartialEq for str
- impl PartialEq for str
- Ipv4Addr::from_octets
- Ipv6Addr::from_octets
- Ipv6Addr::from_segments
- impl Default for Pin<Box> where Box: Default, T: ?Sized
- impl Default for Pin<Rc> where Rc: Default, T: ?Sized
- impl Default for Pin<Arc> where Arc: 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
- impl Sum for Saturating
- impl Product for Saturating
- impl Product for Saturating
- Märkus 'const' rakendatud funktsioonides:
- ::each_ref
- ::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Kompilaator on uuendatud LLVM 21 haru versioonini.
Allikas: opennet.ru
