Rust 1.65 programozási nyelv kiadás

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.65 általános célú programozási nyelv. A nyelv a memória biztonságára összpontosít, és biztosítja az eszközöket a munka magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtő és a futási időt (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust memóriakezelési módszerei megóvják a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és megóvják az alacsony szintű memóriakezelésből adódó problémáktól, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, a buildek biztosításához és a függőségek kezeléséhez a projekt fejleszti a Cargo csomagkezelőt. A crates.io tároló támogatja a könyvtárak tárolását.

A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.

Főbb újítások:

  • Hozzáadott támogatás az általános társított típusokhoz (GAT, Generic Associated Types), amelyek lehetővé teszik egy másik típushoz társított típusálnevek létrehozását, és lehetővé teszik a típuskonstruktorok tulajdonságokhoz való társítását. vonás Foo { type Bar; }
  • A „let... else” kifejezést implementálták, lehetővé téve a mintaillesztési feltétel közvetlen ellenőrzését a „let” kifejezésen belül, és tetszőleges kód futtatását, ha a minta nem egyezik. legyen Ok(count) = u64::from_str(count_str) else { panic!("Nem lehet elemezni az egész számot: '{count_str}'"); };
  • Engedélyezze a break utasítás használatát a megnevezett blokkokból való idő előtti kilépéshez, a blokknév (címke) használatával azonosítja a lezárandó blokkot. let result = 'blokk: { do_thing(); if condition_not_met() { break ‘blokk 1; } do_next_thing(); if condition_not_met() { break ‘blokk 2; } do_last_thing(); 3};
  • A Linux esetében a korábban csak a macOS platformon elérhető hibakeresési információk (split-debuginfo) külön-külön menthetők. A "-Csplit-debuginfo=unpacked" opció megadásakor a DWARF formátumú debuginfo adatok több külön objektumfájlba kerülnek mentésre ".dwo" kiterjesztéssel. A "-Csplit-debuginfo=packed" megadása egyetlen csomagot hoz létre ".dwp" formátumban, amely tartalmazza a projekt összes hibakereső-adatát. Ha a debuginfo-t közvetlenül az ELF-objektumok .debug_* szakaszába szeretné integrálni, használja a "-Csplit-debuginfo=off" opciót.
  • Az API új része átkerült a stabil kategóriába, beleértve a tulajdonságok módszereit és megvalósításait is:
    • std::backtrace::Backtrace
    • Kötött::as_ref
    • std::io::read_to_string
    • ::cast_mut
    • ::cast_const
  • A „const” attribútumot, amely meghatározza annak lehetőségét, hogy konstansok helyett tetszőleges környezetben használjuk, a ::offset_from és a ::offset_from függvények használják.
  • Az LSP (Language Server Protocol) protokoll megvalósításának rozsdaelemzőre való átvitelének utolsó szakaszában a Rust Language Server (RLS) elavult implementációját lecserélték egy csonkkiszolgálóra, amely figyelmeztetést ad, és javasolja, hogy váltsanak át rozsdaelemző segítségével.
  • A fordítás során engedélyezve van a MIR köztes kód inline telepítésének támogatása, ami 3-10%-kal felgyorsítja a tipikus ládacsomagok összeállítását.
  • Az ütemezett összeállítások felgyorsítása érdekében a Cargo csomagkezelő válogatja a sorban a végrehajtásra váró feladatokat.

Ezenkívül megjegyezheti az interjút a Volvo rozsdanyelvének használatáról az autóipari információs rendszerek összetevőinek fejlesztésére. Nem tervezik a meglévő és tesztelt kód átírását a Rustban, de az új kód esetében a Rust az egyik előnyben részesített lehetőség a minőség javítására alacsonyabb költségek mellett. A Rust nyelv használatával kapcsolatos munkacsoportok az AUTOSAR (AUTomotive Open System ARchitecture) és a SAE (Society of Automotive Engineers) autóipari egyesületekben is létrejöttek.

Emellett Kleidermacher Dávid, a Google mérnöki alelnöke beszélt az Android platformon a titkosítási kulcsok kezelésére használt kód Rust-ba fordításáról, valamint a Rust használatáról a DNS over HTTPS protokoll veremben való megvalósításában. UWB-chipekhez (Ultra-Wideband) és a Tensor G2 chiphez kapcsolódó virtualizációs keretrendszerben (Android Virtualization Framework). Új, Rust nyelven átírt Bluetooth és Wi-Fi stackeket is fejlesztenek Androidra. Az általános stratégia a biztonság fokozatos megerősítése, először a legsebezhetőbb és létfontosságú szoftverkomponensek Rust-ba való konvertálásával, majd más kapcsolódó alrendszerekre való kiterjesztésével. Tavaly a Rust nyelv felkerült az Android platform fejlesztésére engedélyezett nyelvek listájára.

Forrás: opennet.ru

Hozzászólás