Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.78 á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:
- Új „#[diagnosztika]” attribútum névteret javasoltak, amely lehetőséget biztosít a fordító által generált hibaüzenetek befolyásolására. Az új területen az első a "#[diagnostic::on_unimplemented]" attribútum, amellyel személyre szabhatóak az olyan helyzetekben megjelenő hibaüzenetek, amikor a típushoz nem implementált tulajdonságot kell használni. #[diagnostic::on_unimplemented( message = "Az `ImportantTrait<{A}>` üzenetem nincs implementálva `{Self}`-hez", label = "Saját címkém", note = "1. megjegyzés", note = "Megjegyzés 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Üzenetem az `ImportantTrait ` nincs implementálva a `String' számára —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Saját címkém | | | a jelen felhívás által bevezetett kötés | = segítség: a tulajdonság `FontosTrait ` nincs implementálva a `String` = megjegyzés: 18. megjegyzés = megjegyzés: 12. megjegyzés
- A nem biztonságos függvényekre alkalmazott érvényesítés előtti ellenőrzések most elhalaszthatók a kódgenerálásig, így ezek az ellenőrzések anélkül hajthatók végre, hogy a szabványos könyvtárat "#[cfg(debug_assertions)]" módban kellene felépíteni. Az ellenőrzések elindításához elegendő engedélyezni a hibakeresési állításokat a kód teszt- vagy hibakeresési buildjeihez.
- A szabványos könyvtárban a mutatók és szeletek igazítását befolyásoló függvények viselkedése immár előre jelezhető futás közben, és a bemeneti adatoktól függ. A pointer::align_offset függvény, amely az eltolást számítja ki a mutató igazításához, most csak akkor adja vissza a use::MAX értéket, ha a művelet sikertelen. A slice::align_to és slice::align_to_mut függvények, amelyek a szeleteket egy igazított középső szelettel és az eredeti kezdő és záró szelettel ábrázolják, most mindig a legnagyobb középső részt adják vissza.
- Az alábbiak kerültek stabil kategóriába:
- impl Olvassa el &Stdin
- Engedélyezze a nem statikus (nem statikus) élettartam használatát egyes std::error::Error-alapú megvalósításoknál.
- Impl implementáció ?Méret érték megengedett.
- impl From io::Error esetén
- A Barrier::new() függvényt stabilizálták, hogy konstansok helyett a "const" attribútummal használható legyen bármilyen környezetben.
- Az x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm és i686-gnullvm platformokhoz most legalább Windows 10 verzió szükséges.
- A harmadik támogatási szint a wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf és lolongarch64-unknown-linux-musl platformokon valósult meg. A harmadik szint alapvető támogatást foglal magában, de automatikus tesztelés, hivatalos buildek közzététele és a kód összeállíthatóságának ellenőrzése nélkül.
- Az Add wasm32-wasip1 célplatform támogatásának második szintje megvalósult. A támogatás második szintje összeszerelési garanciával jár.
- A wasm32-wasi-preview1-threads platform átnevezve wasm32-wasip1-threadsre.
- A fordító LLVM 18 használatára vált. Az LLVM 18 x86-32 és x86-64 architektúrákhoz való használatakor az u128 és i128 típusokhoz társított ABI módosult.
- A Cargo paktumkezelőben a zárfájlok 4-es verziója (lockfile v4) stabilizálva lett.
- A Cargo stabilizált globális gyorsítótárral rendelkezik, amely információkat tartalmaz a legújabb adathasználatról. A gyorsítótárat a $CARGO_HOME/.global-cache tárolja SQLite használatával, és automatikusan frissül, hogy tükrözze az index, a ládafájl, a kódkönyvtár, a git klón és a git checkout legújabb változásait.
Ezenkívül a Borgo programozási nyelv próbál kifejezőbb, mint a Go nyelv, de kevésbé bonyolult, mint a Rust nyelv. A Borgo egyesíti a Go és a Rust legjobb tulajdonságait, pótolva az egyes nyelvek hiányosságait. Például a Go egyszerű és egyértelmű, de nem nyújt fejlett típusú biztonsági funkciókat. A Rust nyelv eszközöket biztosít a biztonságos programozáshoz, de túlbonyolított. A projektet Marco Sampellegrini, a The Simple Haskell Handbook szerzője és a Quad CI folyamatos integrációs rendszer fejlesztője fejleszti.

A Borgo statikus gépelést, Go-szerű típusokat és Rust-szerű szintaxist használ. A pontosvessző nem kötelező a sorok végén a Borgo-kódban. A Borgo kódot egy Go reprezentációba fordítják, amely teljes mértékben kompatibilis a meglévő Go csomagokkal. A fordítókód Rust nyelven íródott, és az ISC licence alatt kerül terjesztésre. használja az fmt enum NetworkState parancsot { Loading, Failed(int), Success(T), } struct Válasz { cím: karakterlánc, időtartam: int, } fn main() { let res = Válasz { title: "Hello world", időtartam: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “még mindig betöltés”, NetworkState.Failed(code) => fmt.Sprintf(“Hibakód: %d”, kód), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Forrás: opennet.ru
