Megjelent a Mozilla projekt által indított, de jelenleg a Rust Foundation független nonprofit szervezet által fejlesztett Rust programozási nyelv 1.95-ös verziója. A nyelv a memória biztonságos kezelésére összpontosít, lehetővé téve a feladatok magas párhuzamossággal való végrehajtását, anélkül, hogy szeméttárolóra vagy futtatási környezetre lenne szükség (a futtatási környezet alapvető inicializálásra és a standard könyvtár kísérésére korlátozódik).
A Rust memória kezelésének módszerei arra irányulnak, hogy kiküszöböljék a pointerekkel végzett manipuláció során fellépő hibákat, és megvédjék a memória alacsony szintű használatából adódó problémáktól, mint például a már felszabadított memória területekhez való hozzáférés, a null pointerek dereferálása, a buffer túlfolyás és hasonlók. A könyvtárak terjesztésére, a fordítás biztosítására és a projektek függőségeinek kezelésére a Cargo csomagkezelő fejlődik.
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:
- Hozzáadva a «cfg_select!» makró, amely a «cfg-if» csomag helyett alkalmazható a fordítási feltételek blokkszerű kezelésére, anélkül, hogy a «#[cfg]» konstrukcióval láncolni kellene a feltételes kifejezéseket. cfg_select! { unix => { fn foo() { /* unix * } } target_pointer_width = «32» => { fn foo() { 0A /* nem-unix, 32-bit * } } _ => { fn foo() { 0A /* nem unix és nem 32-bit * } } }
- Stabilizálták az «if let» kifejezések használatát a «match» blokkokon belül, lehetővé téve a feltételek szerinti mintaillesztéseket. Korábban a több «let» kifejezés megadásának támogatása az «if» és «while» blokkokban az «&&» operátorral stabilizálták. match value { Some(x) ha let Ok(y) = compute(x) => { println!("{}, {}", x, y); } _ => {} }
- Stabilizálták az inline assembler támogatását a PowerPC és PowerPC64 architektúrákhoz.
- Ú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:
- MaybeUninit: From<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit]>
- MaybeUninit: AsMut<[MaybeUninit; N]>
- MaybeUninit: AsMut<[MaybeUninit]>
- [MaybeUninit; N]: From<MaybeUninit
- Cell: AsRef<[Cell; N]>
- Cell: AsRef<[Cell]>
- Cell: AsRef<[Cell]>
- bool: TryFrom
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- ::as_ref_unchecked
- ::as_ref_unchecked
- ::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- A «const» jelző alkalmazása a funkciókban:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- A stabil verziókban megszüntették a saját célplatformspecifikációk átadásának támogatását a fordítónak.
- A powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos és aarch64-apple-visionos-sim célplatformok a második támogatási szintre kerültek, ami a fordítási garanciát jelenti, de a tesztelési esetek teljesítésekor nincs garancia.
Érdemes megemlíteni a Rust-tal kapcsolatos, nemrégiben bejelentett projekteket és eseményeket:
- A Canonical bemutatta a Mir 2.26 display szervert, amely egy könyvtárgyűjteményt nyújt összetett rendszerek létrehozásához szerverek a Wayland protokoll alapján, és magában foglalja az ablakkezelők és display szerverek tipikus funkcióit. A Mir olyan projektekben van használatban, mint a Miracle összetevő menedzser, az Ubuntu Frame internetes kioszk shell és a Miriway felhasználói környezet.
Az új kiadás figyelemre méltó a Rust nyelven történő komponensek fejlesztésének lehetőségével. A Rust-on megvalósított evdev-rs alternatív beviteli kezelő rendszer és elindult a Wayland-hoz készült Rust alapú front-end, a wayland-rs fejlesztése. A Rust-tól független változtatások között a Mir platform támogatja a Wayland protokollokat, mint az ext_image_copy_capture_v1 és az input-triggers.
- Megjelent az első forgalomelemző, az ayaFlow, amely Rust nyelven készült és a Linux kernel eBPF alrendszerét használja a hálózati csomagok (IPv4/TCP/UDP) és Ethernet keretek elfogására, minimális teljesítményhatással. Támogatja a mély protokollelemzést (L7), például a TLS SNI és DNS lekérdezések kinyerését titkosított forgalom elemzésekor. A rendszer képes követni a kapcsolatok aktuális állapotát DashMap formátumban, tárolni a történetet SQLite-ban és statisztikákat szolgáltatni REST API-n keresztül a Prometheus számára.
- Lehetőség nyílt több szálon futó Rust alapú alkalmazások készítésére, amelyek használják a std::thread funkciókat és a GPU oldalán futnak.
Forrás: opennet.ru
