Rust 1.61 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.61 á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:

  • Lehetőség van saját visszatérési kódok megadására a fő függvényből. Eredetileg a Rust fő függvénye csak a "()" (egység) típust tudta visszaadni, ami mindig sikeres kilépési állapotot jelez, hacsak a fejlesztő nem hívta meg kifejezetten a "process::exit(code)" függvényt. A Rust 1.26-ban a fő funkció instabil terminációs jellemzőjét használva lehetséges volt az „Ok” és „Err” értékek visszaadása, amelyek megfelelnek az EXIT_SUCCESS és EXIT_FAILURE kódoknak a C programokban. A Rust 1.61-ben a Termination vonást stabillá tették, és egy külön ExitCode típust javasoltak egy adott visszatérési kód képviselésére, amely absztrahálja a platform-specifikus visszatérési típusokat az előre definiált SUCCESS és FAILURE konstansok, valamint a From metódus megadásával. egyéni visszatérési kód visszaküldéséhez. std::process::ExitCode használata; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Kilépési kód::SIKER }
  • A „const fn” kifejezéssel definiált függvények további képességei stabilizálásra kerültek, amelyek nem csak reguláris függvényeknek nevezhetők, hanem konstansok helyett bármilyen környezetben használhatók. Ezeket a függvényeket fordítási időben számítják ki, nem futásidőben, ezért bizonyos korlátozások vonatkoznak rájuk, például a csak konstansokból való olvasás lehetősége. Az új verzióban a függvénymutatókkal végzett alapműveletek engedélyezettek a const függvényeken belül (mutatók létrehozása, átadása és öntése megengedett, de függvény mutatónkénti meghívása nem); vonáshatárok a const függvények általános paramétereihez, mint például a T: Copy; dinamikusan elosztható tulajdonságok (dyn Trait); impl Vonattípusok függvényargumentumokhoz és visszatérési értékekhez.
  • Az adatfolyam Stdin, Stdout és Stderr std::io-ban kezeli most már statikus élettartammal rendelkezik ("static"), amikor zárolva van, lehetővé téve az olyan konstrukciókat, mint a "let out = std::io::stdout().lock();" fogantyú megszerzésével és zár beállításával egy kifejezésben.
  • 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:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Írja be a kurzort<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Megszakítás
    • std::thread::JoinHandle::is_finished
  • A "const" attribútum, amely meghatározza, hogy konstansok helyett bármilyen környezetben használható, a függvényekben használatos:
    • <*const T>::offset és <*mut T>::offset
    • <*const T>::wrapping_offset és <*mut T>::wrapping_offset
    • <*const T>::add és <*mut T>::add
    • <*const T>::sub és <*mut T>::sub
    • <*const T>::wrapping_add és <*mut T>::wrapping_add
    • <*const T>::wrapping_sub és <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Ezenkívül megjegyezheti a „Rust: A Critical Retrospective” című cikket, amely összefoglalja a Rust nyelv benyomásait, miután 100 ezer sornyi kódot írt bele a firmware-ben használt Xous mikrokernel operációs rendszer fejlesztése során. A hátrányok közé tartozik a nehezen érthető szintaxis, a nyelv hiányossága és folyamatos fejlesztése, az ismételhető felépítések hiánya, a Crates.io-ban való függőségi bizalom tipikus problémái, valamint a biztonságos kód írásának bizonyos fegyelem fenntartása. A várakozásokat felülmúló funkciók közé tartoznak a gyors prototípuskészítés során hozzáadott kódok újrafeldolgozásához és a „hackek” átdolgozásához szükséges eszközök.

Forrás: opennet.ru

Hozzászólás