Rust 1.57 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.57 rendszerprogramozási nyelv kiadása. A nyelv a memória biztonságára összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas szintű párhuzamosság elérését szemétgyűjtő vagy futási idő nélkül (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust automatikus memóriakezelése kiküszöböli a mutatók manipulálása során fellépő hibákat, és védelmet nyújt az alacsony szintű memóriamanipulációból eredő problémák ellen, mint például a memóriaterület felszabadítása utáni hozzáférés, nullmutató hivatkozások, puffertúllépések stb. A programkönyvtárak terjesztésére, az összeállítás biztosítására és a függőségek kezelésére a projekt a Cargo csomagkezelőt fejleszti. A crates.io tároló támogatja a könyvtárak tárolását.

Főbb újítások:

  • A „pánik!” makró használata stabilizálódott. a fordítás során létrehozott kontextusokban, például a "const fn" deklarációkban. Ezenkívül a "pánik!" const deklarációk lehetővé teszik az „assert!” makró használatát. és néhány más szabványos könyvtári API. A stabilizálás még nem fedi le a teljes formázási infrastruktúrát, így jelenlegi formájában a „pánik!” makró csak statikus karakterláncokkal (pánik!(“...")) használható, vagy egyetlen interpolált "&str" értékkel helyettesítéskor (pánik!("{}", a)), aminek a "{" helyettesítésére kell korlátozódnia. }" formázási specifikációk és egyéb típusok nélkül. A jövőben a makrók állandó kontextusban való alkalmazhatósága bővülni fog, de a stabilizált képességek már a fordítási szakaszban elegendőek az assert ellenőrzések elvégzéséhez: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • A Cargo csomagkezelő lehetővé teszi tetszőleges nevű profilok használatát, nem korlátozva a "dev", "release", "test" és "bench" kifejezésekre. Például, ha csak a végtermék-összeállítások generálásakor szeretné engedélyezni az optimalizálást a linkelési szakaszban (LTO), létrehozhat egy „gyártási” profilt a Cargo.toml-ben, és hozzáadhatja az „lto = true” jelzőt. A saját profilok definiálásakor azonban meg kell adnia egy meglévő profilt, hogy örökölje az alapértelmezett beállításokat. Az alábbi példa egy „gyártási” profilt hoz létre, amely kiegészíti a „release” profilt az „lto = true” jelzővel. Maga a profil a cargo „--profile production” opcióval történő meghívásával aktiválódik, és az összeszerelési műtermékek a „cél/gyártás” könyvtárba kerülnek. [profile.production] inherits = "release" lto = igaz
  • Stabilizálódott a try_reserve használata a Vec, String, HashMap, HashSet és VecDeque típusoknál, amely lehetővé teszi, hogy egy adott típusú elem bizonyos számú elemére előre lefoglaljon helyet a memóriafoglalási műveletek gyakoriságának csökkentése és elkerülése érdekében. memóriahiány miatt működés közben összeomlik.
  • Megengedett kapcsos zárójeles makrók megadása olyan kifejezésekben, mint az "m!{ .. }.method()" és az "m!{ .. }?".
  • A File::read_to_end és read_to_string függvények végrehajtása optimalizálva lett.
  • A Unicode specifikáció támogatása a 14.0-s verzióra frissült.
  • Bővítette a "#[must_use]" jelzésű függvények számát, hogy figyelmeztetést adjon ki, ha a visszatérési értéket figyelmen kívül hagyja, ami segít azonosítani azokat a hibákat, amelyeket abból adódó feltételezésből adódóan, hogy egy függvény megváltoztatja az értékeket, nem pedig új értéket ad vissza.
  • Kísérleti háttérrendszer hozzáadva a libgccjit használatával kódgeneráláshoz.
  • 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; N]::mint_mut_slice
    • [T; N]::as_slice
    • gyűjtemények::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterátor::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Parancs::get_program
    • Parancs::get_args
    • Parancs::get_envs
    • Parancs::get_current_dir
    • CommandArgs
    • CommandEnvs
  • A „const” attribútumot, amely meghatározza, hogy használható-e bármilyen kontextusban konstansok helyett, a hint::unreachable_unchecked függvény használja.
  • A harmadik támogatási szint az armv6k-nintendo-3ds, az armv7-unknown-linux-uclibceabihf, az m68k-unknown-linux-gnu, az aarch64-kmc-solid_asp3, az armv7a-kmc-solid_asp3-eabi és az armv7a-hoz solid_asp3-eabihf platformok. A harmadik szint alaptámogatást foglal magában, de automatikus tesztelés, hivatalos buildek közzététele vagy annak ellenőrzése nélkül, hogy a kód összeállítható-e.

Forrás: opennet.ru

Hozzászólás