A Linux kernel dráma közepette érkezett a Rust 1.85.0

 Az 1.85 a 2024-es kiadás egy újabb javítása, amely tovább javítja memóriabiztonságot és az egyidejűségi modelleket és igyekszik egy jobb és megbízhatóbb eszközöket nyújtani teljesítménykritikus rendszerek fejlesztéséhez. A Rust elfogadtatása azonban, pont ott halad a legnehezebben, ahol a leginkább létjogosultsága van, a Linux kernel fejlesztésében.

A változások, amelyek szintaktikai és szemantikai kérdéseket is érintenek a visszafelé kompatibilitás szem előtt tartásával kerültek bevezetésre, hogy a meglévő kódbázisok destabilizálása nélkül lehessen a projektekbe a frissítéseket bevezetni. Tehát maga a nyelv tervezése és az azt övező filozófiák is azt sejtetik, hogy ez az a nyelv amivel kernel szinten dolgozni érdemes.

Főbb Rust 2024 változások

A Return Position Impl Trait élettartam rögzítési szabályai

Az egyik legjelentősebb változás a return position impl Trait (RPIT) típusok rögzítési szabályait érinti. A 2024-es kiadás módosítja az alapértelmezett élettartamrögzítési viselkedést, hogy kizárja a paraméterek implicit rögzítését, hacsak nem kérik kifejezetten a use<...> szintaxissal. Ez a módosítás megakadályozza a véletlen élettartam-bővítési forgatókönyveket, amelyek korábban finom hibákhoz vezettek az aszinkron függvényekben és a trait implementációkban. A régebbi kódbázisokat migráló fejlesztőknek ellenőrizniük kell a visszatérési típusaláírásokat, különösen az általános paramétereket aszinkron műveletekkel kombináló kontextusokban.

Időbeli hatókör-beállítások

A kiadás finomított időbeli hatókörszabályokat vezet be az if let kifejezések és a block tail kifejezések esetében. Az if let feltételekben létrehozott időbeliségek mostantól az egész if let blokkban fennmaradnak, kiküszöbölve ezzel a használat utáni hibák egy csoportját, amelyek akkor fordulhattak elő, amikor több mintaillesztésen keresztül hivatkoztak értékekre. Hasonlóképpen, a blokkokban lévő „tail” kifejezések hosszabb időbeli élettartamot kapnak, ami lehetővé teszi a kifejezések természetesebb láncolását mesterséges let-kötési követelmények nélkül. Ezek a változtatások a Rust érettségét mutatják a bonyolult vezérlésáramlási minták biztonságos kezelésében.

Natív aszinkron lezárások támogatása

A Rust 1.85.0 az async || {} szintaxis stabilizálásával teljesíti az aszinkron lezárások régóta várt ígéretét. Ez a funkció a Rust párhuzamossági eszköztárának kritikus hiányosságát zárja be azzal, hogy a zárlatok rögzíthetik a környezetüket, miközben futures-t állítanak elő. A megvalósítás három új szabványos könyvtári tulajdonságot vezet be - AsyncFn, AsyncFnMut és AsyncFnOnce -, amelyek tükrözik szinkron társaikat, de impl Future-t adnak vissza.

A következmények az aszinkronizált kódbázisokra nézve mélyrehatóak. Vegyük például ezt a HTTP-kiszolgálói middleware példát: 

async fn handle_request(req: Request) -> Response {
    let auth_token = req.headers().get("Authorization");
    let authenticate = async || {
        let db = connect_to_database().await;
        db.validate_token(auth_token.unwrap()).await
    };
    
    if authenticate().await.is_ok() {
        process_request(req).await
    } else {
        Response::unauthorized()
    }
}

 Ez a szintaxis kiküszöböli a kézi future wrappinggel kapcsolatos bojlerplate-et, miközben fenntartja a Rust szigorú tulajdonosi garanciáit az aszinkron határok között.

Rust-verzió-tudatos függőségi feloldás

A Cargo függőségi feloldója az 1.85.0-ban bevezeti a rust-verzió tudatosságot, kihasználva a Cargo.toml manifesztekben lévő rust-version mezőt. Ez a funkció megakadályozza az olyan függőségi gráf feloldást, amely a megadottnál újabb Rust verziót igényel, így hatékonyan kiküszöböli az eszközlánc-kompatibilitási problémák egy osztályát. A munkaterület karbantartók számára a feloldó mostantól szigorúan érvényesíti a default-features = false deklarációkat az örökölt függőségekre vonatkozóan, konzisztenciát teremtve a nagyméretű projektkonfigurációkban.

Stílus kiadások a Rustfmt-ben

A Rustfmt a nyelvi kiadásoktól függetlenített stíluskiadásokat vezet be, lehetővé téve a csapatok számára, hogy a modern formázási szabályokat a teljes kiadásváltás vállalása nélkül is átvegyék. Az 1.85.0 kiadás javított azonosító rendezési algoritmusokat tartalmaz, amelyek a nyers azonosítókat (r#foo) és a numerikus utótagokat következetesen kezelik a projektekben.

A Linux kernel dráma

A Linux kernelt hagyományosan C nyelven fejlesztik, de 2021-től fokozatosan elkezdték a Rust bevezetését a jobb memóriabiztonság és a gyakori programozási hibákkal szembeni kisebb sebezhetőség ígérete miatt. Azonban több fejlesztő köztük veterán kernel karbantartók, már rögtön a kezdeteknél megkérdőjelezték, hogy célszerű e különböző programozási nyelvek keverése egy ilyen kritikus helyen mint a kernel. A viták egészen odáig fajultak, hogy azok kezdtek vallási felhangot kapni.

A vita az idei év elején érte el a csúcspontot, amikor Christoph Hellwig a kernel DMA (Direct Memory Access) segédprogramjainak karbantartója elutasította azokat azokat a javításokat, amelyek lehetővé tették volna, hogy a Rust illesztőprogramok együttműködhessenek az ő C-alapú alrendszereivel. Hellwig azzal érvelt a nyelvek közötti integráció megnehezíti a karbantartást és széttöredezi a kritikus infrastruktúrát, és gyakorlatilag rákos daganathoz hasonlította a Rust betüremkedését az ő fejlesztői munkájába. A Rust fejlesztők ezt nyilván nem hagyták szó nélkül hiszen Hellwig egyértelműen korlátozásokat vezetett be olyan alrendszerek magvalósításánál amelyek nem tartoztak a felügyelete alá. A Rust fejlesztők először a közösségi médiában kerestek támogatókat, majd Linus Torvalds-ot kérték meg hogy oldja fel a problémát. Linusnak nem tetszett, hogy a Rust fejlesztők élükön Hector Martin a közösségi médiához fordultak. Miután Linus nem Matinnak adott igazat sőt őt nevezte meg a probléma forrásaként, Martin lemondott karbantartói pozíciójáról és csalódottságának adott hangot a vezetéssel kapcsolatban.

A dráma végül azzal vett pozitív fordulatot, hogy rögzítették az együttműködési irányelveket, és a Rust fejlesztéseket elismerték. A C kódok a továbbiakban nem módosíthatják úgy az apikat, hogy a Rust-ban meglévő fejlesztések működésképtelenné váljanak. Linus tehát végül felülbírálta Hellwig blokádját. 

Osszd meg ezt a cikket
Zorin OS 17.3 a legfelhasználóbarátabb GNOME asztali környezettel
A 2023. március 26-án megjelent Zorin OS 17.3 számos olyan újítást hoz, amelyek a rendszer felhasználói élményét, biztonságát és kompatibilitását hivatottak javítani.
Tízszeres gyorsulás a TypeScript motor Go nyelvre való átírása után
A TypeScript csapata többször próbálta már az eredeti JavaScript motort átírni, más programozási nyelvre, de ez idáig ezek a próbálkozások nem hozták a kívánt eredményt. A napokban azonban bejelentették, hogy a Go nyelvre történő átírással áttörést értek el.
Elérhető a Fedora 42 béta
A Fedora 42 béta verzió már elérhető és tesztelhető, míg a stabil kiadást április 15-re tervezik . Az új verzió számos jelentős fejlesztést tartalmaz, amelyek célja a felhasználói élmény javítása, a telepítési folyamat egyszerűsítése, valamint a modern asztali környezetek és technikai megoldások integrálása.
GitHub Models, AI modellek futtatása Linux terminálból
Fedezd fel, hogyan futtathatsz AI modelleket Linux terminálból a GitHub Models segítségével, még egy régi ThinkPad T470p-n is.