Megjelent a Rust 1.91 programozási nyelv, amelyet a Mozilla projektje alapozott meg, de jelenleg egy független, nonprofit szervezet, a Rust Foundation fejleszt. A nyelv a memória biztonságos kezelésére összpontosít, és olyan eszközöket biztosít, amelyek lehetővé teszik a feladatok magas fokú párhuzamos végrehajtását, mindezt anélkül, hogy szeméttakarítóra és futási időre lenne szükség (a futási idő csupán az alapvető inicializálásra és a szabványos könyvtár támogatására korlátozódik).
A Rust memória kezelésének módszerei megszüntetik a fejlesztők hibáit a mutatókkal való manipulálás során, és védelmet nyújtanak az alacsony szintű memória kezelésből adódó problémákkal szemben, mint például a már felszabadított memória területére való hivatkozás, null-pointer dereferálás, pufferméret túllépés stb. A könyvtárak terjesztésére, a build biztosítására és a függőségek kezelésére a Cargo csomagkezelő fejlesztés alatt áll. A könyvtárak elhelyezésére a crates.io tároló támogatott.
A memória biztonságos kezelése a Rustban a fordítási időben történik, a hivatkozások ellenőrzésén, az objektumok tulajdonjogának nyomon követésén, az objektumok élettartamának (láthatóságának) figyelembevételén és a memória hozzáférésének helyességének értékelésén keresztül a kód futtatásakor. A Rust emellett eszközöket biztosít az egész számok túllépésének elleni védelemhez, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza a változatlan (immutable) hivatkozások és változók fogalmát alapértelmezés szerint, és erős statikus típussal minimalizálja a logikai hibákat.
Főbb újítások:
- Javult a 64 bites ARM rendszerek támogatása Windows operációs rendszerrel. A célplatform "aarch64-pc-windows-msvc" a második támogatási szintről az elsőre került. Második támogatási szintet biztosítottak az aarch64-pc-windows-gnullvm és x86_64-pc-windows-gnullvm architektúrák számára. Az első támogatási szint a bináris buildk létrehozását, alapos tesztelést és a platform maximális támogatási garanciájának nyújtását foglalja magában - minden fordítóban végrehajtott módosítást a teljes tesztkészlet végrehajtásával ellenőriznek. A második támogatási szint a bináris buildk létrehozását és a build garanciáját magában foglalja, de nem garantálja a tesztkészlet teljesítését. A harmadik szint alapvető támogatást nyújt, de automatikus tesztelés, hivatalos buildk közzététele és a kód buildelésének ellenőrzése nélkül.
- Hozzáadva a lint figyelmeztetés „dangling_pointers_from_locals”, amely a függvények által visszaadott lógó raw mutatók (dangling raw pointer) azonosítására szolgál, amelyek lokális változókra mutatnak, amelyek a meghívott függvényben lettek definiálva. Az ilyen változók törlődnek a függvény befejezése után, és a hozzájuk kapcsolódó adatokra mutató raw mutatók lógóvá válnak, vagyis felszabadított memóriára mutatnak. Az ilyen mutató későbbi dereferálása határozatlan viselkedéshez vezet. fn f() -> *const u8 { let x = 0; &x // figyelmeztetés: lógó mutató fog keletkezni, mert a lokális változó «x» el fog tűnni }
- Hozzáadva a lint figyelmeztetés „integer_to_ptr_transmutes”, amely az egész számok pointerekké való transzmutálásáról tájékoztat a std::mem::transmute függvény segítségével.
- A Cargo csomagkezelőben stabilizálva lett a „build.build-dir” paraméter támogatása, amely a cargo és rustc által a build folyamat során létrehozott ideiglenes build artefaktumok tárolási mappáját határozza meg.
- A sysv64, win64, efiapi és aapcs ABI számára stabilizálva lett a C stílusú változó számú argumentumokat fogadó függvények deklarálásának támogatása.
- A inline assembler támogatása stabilizálva lett a LoongArch32 architektúrához.
- Új API-k kerültak a stabil kiadások közé, beleértve a metódusok és típusimplementációk stabilizálását:
- 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}>
- A «const» jelző alkalmazása a funkciókban:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- A fordítófrissítve lett az LLVM 21-es ágra.
Forrás: opennet.ru
