Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.63 á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áadtuk az std::thread::scope API-t, amely lehetővé teszi hatókörrel rendelkező szálak létrehozását. A korábban elérhető szálakkal ellentétben az új std::thread::scope API lehetővé teszi a nem statikus adatok kölcsönzését, míg a klasszikus std::thread::spawn API-val létrehozott szálaknak az összes átadott argumentummal rendelkezniük kellett, és nem tudtak kölcsönzött változókat lekérni. Az std::thread::scope API garantálja, hogy minden létrehozott szál az adatok visszaadása előtt leáll, biztosítva a kölcsönzési mechanizmus számára a szükséges biztonsági szintet.
- Új fájlleíró kötéstípusokat, a BorrowedFd-t és az OwnedFd-t javasoljuk, amelyek kölcsönzést és tulajdonjogot biztosítanak. A típusok "#[repr(transparent)]" jelöléssel vannak ellátva, így közvetlenül használhatók külső C kötésekben tulajdonjoggal.
- Lehetővé tette a Condvar::new, Mutex::new és RwLock::new függvények meghívását konstans kontextusokban, globális statikus Mutex, RwLock és Condvar értékek létrehozásához lazy_static csomagok használata nélkül.
- Az fn foo típusú függvények esetén (érték: T, f: impl Másolás) szintaxis, mint például a "foo::" engedélyezett (3, 3)”, egyértelműen jelezve a generikus típusát.
- Befejeződött az átállás az NLL (Non-Lexical Lifetimes) technikára a változókölcsönzési problémák észlelésére. Az NLL a végrehajtási folyamatgráfban lévő mutatók halmazának szintjén végzi a könyvelést, ami javítja a kölcsönzés-ellenőrző minőségét, és lehetővé teszi bizonyos típusú helyes kódok végrehajtását, amelyek korábban hibákat eredményeztek. A régi mechanizmus támogatása, amely lexikai élettartam-kötést használt, mostantól teljesen eltávolításra került a rustc-ből, és az új NLL használata univerzálisan megvalósult.
- 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:
- tömb::from_fn
- Box::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- Path::try_exists
- Hiv.::szűrőtérkép
- RefMut::filter_map
- NonNull::<[T]>::hossz
- Tulajdonosnak::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
Forrás: opennet.ru
