Publicēts programmēšanas valodas Rust 1.91 laidens, kuru izstrādājusi Mozilla, bet tagad attīsta neatkarīga bezpeļņas organizācija Rust Foundation. Valoda ir vērsta uz drošu atmiņas lietošanu un nodrošina līdzekļus augstas paralēlismu īstenošanai, neradot pārmērību atkritumu savācēja un izpildes laika (izpildes laiks ir ierobežots līdz pamata inicializācijai un standarta bibliotēkas apkalpošanai).
Atmiņas apstrādes metodes Rust atvieglo izstrādātājiem kļūdu novēršanu, manipulējot ar rādītājiem, un aizsargā no problēmām, kas rodas zemas līmeņa atmiņas apstrādes dēļ, piemēram, mēģinot piekļūt atmiņas apgabaliem pēc to atbrīvošanas, nulles rādītāju dereferencēšanas, buferu pārsniegšanas utt. Bibliotēku izplatīšanai, kompilācijas nodrošināšanai un atkarību pārvaldībai projekts attīsta pakotņu pārvaldnieku Cargo. Lai atbalstītu bibliotēku izvietošanu, pastāv crates.io repozitorijs.
Droša atmiņas apstrāde Rust tiek nodrošināta kompilācijas laikā, pārbaudot atsauces, izsekojot objektu īpašumtiesības, ņemot vērā objektu dzīves ilgumu (redzamības jomas) un novērtējot piekļuves atmiņai pareizību koda izpildes laikā. Rust arī nodrošina līdzekļus aizsardzībai pret veselu skaitļu pārpelnēm, prasa obligātu mainīgo vērtību inicializāciju pirms to izmantošanas, labāk pārvalda kļūdas standarta bibliotēkā, piemēro invarianti (immutable) atsauču un mainīgo principu pa noklusējumu un piedāvā stipru statisku tipizāciju, lai minimizētu loģiskās kļūdas.
Galvenās jauninājumi:
- Uzlabota atbalsta sniegšana 64 bitu ARM sistēmām ar Windows operētājsistēmu. Mērķplatforma „aarch64-pc-windows-msvc” ir pārnesta no otrā uz pirmo atbalsta līmeni. Otrā atbalsta līmeņa nodrošināšanai ir pieejamas aarch64-pc-windows-gnullvm un x86_64-pc-windows-gnullvm arhitektūras. Pirmais atbalsta līmenis nozīmē bināro izstrādājumu veidošanu, rūpīgu testēšanu un maksimālu platformas atbalstu — katra izmaiņa kompilatorā tiek pārbaudīta, izpildot pilnu testu komplektu. Otrā atbalsta līmenis ietver bināro izstrādājumu veidošanu un garantiju veidošanai, taču negarantē testu komplekta izpildi. Trešais līmenis aptver pamata atbalstu, bet bez automatizētās testēšanas, oficiālo atbrīvošanu un koda veidošanas pārbaudi.
- Pievienots lint brīdinājums «dangling_pointers_from_locals», kas identificē funkciju atgrieztu karājošo raw rādītāju (dangling raw pointer), kas norāda uz datiem, kas saglabāti vietējās mainīgajās, kas definētas izsauktajā funkcijā. Šādi mainīgie tiek izdzēsti funkcijas beigās, un raw rādītāji uz saistītiem datiem kļūst karājoši, t.i., tie norāda uz atbrīvotu atmiņu. Sekojot norādītāja dereferencēšanas rezultātā iegūstam neviennozīmīgu uzvedību. fn f() -> *const u8 { let x = 0; &x // brīdinājums: tiks izveidots karājošs rādītājs, jo vietējā mainīgā «x» tiks noņemta }
- Pievienots lint brīdinājums «integer_to_ptr_transmutes», kas informē par veselu skaitļu pārveidi par rādītājiem, izmantojot funkciju std::mem::transmute.
- Pakotņu pārvaldniekā Cargo ir stabilizēts parametra «build.build-dir» atbalsts, kas nosaka direktoriju, kurā tiek glabāti pagaidu būvniecības artefakti, ko izveido cargo un rustc būvniecības laikā.
- ABI sysv64, win64, efiapi un aapcs atbalsts funkciju deklarēšanu ar mainīgu argumentu skaitu C valodā ir stabilizēts.
- Inline assembler atbalsts arhitektūrai LoongArch32 ir stabilizēts.
- Jauna API daļa ir pārcelta uz stabilo kategoriju, tostarp ir stabilizēti metodes un tipāžu realizācijas:
- 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}>
- Zīme «const» tiek izmantota funkcijās:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Kompilators atjaunots līdz LLVM 21 zaram.
Avots: opennet.lv
