Rust 1.63 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.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

Hozzászólás