Megérkezett a Rust 1.86.0 stabil kiadása

Kilenc hónappal az előző jelentős frissítés után a Rust fejlesztőcsapata örömmel jelentette be a 1.86.0 verzió megjelenését. A Rust legfontosabb küldetése ezzel a verzióval sem változott, melynek célja hogy megbízható és hatékony szoftverek fejlesztését tegye lehetővé mindenki számára. Az új kiadás számos régen várt fejlesztést és hibajavítást hoz, amelyek közül több is mérföldkőnek számít a nyelv fejlődésének történetében.

Megérkezett a Rust 1.86.0 stabil kiadása

A Trait upcasting megjelenése: végre hivatalosan

A kiadás egyik legfontosabb újítása a trait upcasting, amely lehetővé teszi, hogy egy trait objektumot annak szupertrait-jére alakítsunk. Ez azt jelenti, hogy ha egy trait rendelkezik szupertrait-tel, akkor immár közvetlenül át lehet alakítani a referencia típusát anélkül, hogy külön segédfüggvényeket kellene írnunk. Ez a képesség nemcsak referenciák, hanem okos pointerek esetén is működik, például Arc típus esetén is problémamentesen használható Arc formában. A korábban alkalmazott kerülőmegoldások így feleslegessé válnak, ami nemcsak a kód tisztaságát növeli, hanem egyúttal bővíti a nyelv dinamikus típusrendszerének lehetőségeit is. Ez a megoldás különösen az Any trait esetében lesz hasznos, hiszen így külső függőségek nélkül, egyszerűbb módon is elérhetjük az Any által biztosított downcast-módszereket.

Több elem egyidejű, biztonságos módosítása

A Rust kölcsönzési rendszere eddig nem tette lehetővé, hogy ugyanabból a vektorból vagy HashMap-ből több elemet egyidejűleg módosítsunk. Ez most megváltozott: az új get_disjoint_mut nevű segédfüggvények lehetővé teszik, hogy egymástól független memóriarészekre egyszerre kapjunk &mut referenciát. A szabványos könyvtár mostantól támogatja ezt a funkciót szeletek és HashMap típusok esetén is, ezzel egy újabb rést zárva be a kölcsönzési modell és a gyakorlati használhatóság között.

Platformspecifikus optimalizáció biztonságos funkciókkal

Eddig csak unsafe függvények esetében lehetett használni a #[target_feature] attribútumot, amely platformspecifikus utasításkészletek (például avx2) engedélyezésére szolgál. A Rust 1.86.0 lehetővé teszi, hogy biztonságos függvények is megkaphassák ezt az attribútumot, feltéve, hogy azokat csak más, ugyanezzel az attribútummal ellátott függvényekből hívjuk meg. A szabályozás szigorú, de jól dokumentált, és biztosítja, hogy a célplatformnak megfelelő kódok optimalizálva fussanak anélkül, hogy veszélyeztetnénk a nyelv memóriabiztonsági garanciáit.

Debug ellenőrzések a null pointerek ellen

A fordító mostantól ellenőrzi, hogy a mutatók nem null értékűek-e, amikor nem nulla méretű olvasás vagy írás történik, illetve amikor referenciaként újrakölcsönözzük őket. Ez a funkció kizárólag debug módban működik, de jelentős segítséget jelenthet a hibák gyorsabb észlelésében, különösen összetett kódbázisoknál. Bár a fordító már korábban is figyelmeztetett ilyen esetekre, mostantól futásidejű ellenőrzésekkel is megerősíti a figyelmeztetéseket.

Az ABI megadásának szigorítása

A extern blokkokban és függvénydefiníciókban eddig nem volt kötelező megadni az ABI-t, azaz az alkalmazás-bináris interfészt. Ennek hiányában a Rust alapértelmezetten a "C" ABI-t használta. A 1.86.0 verziótól kezdve figyelmeztetést ad, ha az ABI nincs expliciten megadva. Ez előkészíti a későbbi szigorításokat, és hozzájárul a kód hosszú távú karbantarthatóságához.

Egy célplatform kivezetésre kerül

Az i586-pc-windows-msvc célplatform támogatása hamarosan megszűnik, várhatóan már a következő, 1.87.0-s kiadásban. Mivel ez a platform nem követeli meg az SSE2 utasításkészletet, de a Windows 10 — amely az összes támogatott célrendszer alapja — igen, a fejlesztők az i686-pc-windows-msvc változatra való áttérést javasolják. Ez a változás a Rust ökoszisztéma racionalizálását szolgálja.

Újonnan stabilizált API-k

Számos új függvény vált stabilan használhatóvá, többek között a lebegőpontos számokhoz tartozó next_up és next_down, illetve a Vec::pop_if, valamint a sync::Once::wait, sync::Once::wait_force és sync::OnceLock::wait új várakozási metódusai. Emellett több függvény mostantól konstans környezetben is elérhető, például a str::split_at, az io::Cursor::get_mut, io::Cursor::set_position, valamint a hint::black_box.

A kiadási megjegyzések és a bejelentés a Rust hivatalos weboldalán olvasható.