A Rust 2021 (1.56) programozási nyelv kiadása

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.56 rendszerprogramozási nyelv kiadása. A szokásos verziószám mellett a kiadás Rust 2021 néven is szerepel, és az elmúlt három évben javasolt változtatások stabilizálását jelzi. A Rust 2021 a következő három évben is a funkcionalitás növelésének alapjául szolgál majd, hasonlóan ahhoz, ahogyan a Rust 2018 kiadása lett a nyelv fejlesztésének alapja az elmúlt három évben.

A kompatibilitás fenntartása érdekében a fejlesztők "2015", "2018" és "2021" címkéket használhatnak programjaikban, lehetővé téve a programok összekapcsolását a Rust kiválasztott kiadásainak megfelelő nyelvi állapotszeletekkel. A kiadásokat az inkompatibilis módosítások elkülönítésére vezették be, és a rakománycsomagok metaadataiban vannak konfigurálva a „[csomag]” szakasz „kiadás” mezőjében. Például a „2018-as” kiadás tartalmazza a 2018 végével stabilizált funkcionalitást, és minden olyan további változtatást is lefed, amely nem sérti a kompatibilitást. A 2021-es kiadás emellett a jelenlegi 1.56-os kiadásban javasolt és a jövőbeni megvalósításra jóváhagyott interoperabilitás-bontó funkciókat is tartalmaz. A szerkesztők a nyelvezet mellett az eszközök és a dokumentáció állapotát is figyelembe veszik.

A Rust 2021-ben rögzített főbb összeférhetetlenségek:

  • Külön rögzítés a lezárásokban – A lezárások a teljes azonosító helyett egyes mezőneveket is rögzíthetnek. Például: "|| ax + 1" csak az "ax"-t fogja rögzíteni az "a" helyett.
  • A tömbök IntoIterator tulajdonsága: array.into_iter() lehetővé teszi, hogy a tömbelemek között értékek alapján iteráljon, nem pedig hivatkozások alapján.
  • A „|” kifejezések feldolgozása megváltozott a macro_rules mezőben (Logiai VAGY) a mintákban - A ":pat" definíció a találatokban mostantól az "A | B".
  • A rakománycsomag-kezelő alapértelmezés szerint tartalmazza a funkciófeloldó második verzióját, amelynek támogatása a Rust 1.51-ben jelent meg.
  • A TryFrom, TryInto és FromIterator tulajdonságokat hozzáadtuk a prelude szabványos könyvtári modulhoz.
  • A panic!(..) és az assert!(expr, ..) makrók mostantól mindig a format_args!(..)-t használják a karakterláncok formázására, hasonlóan a println!(-hez).
  • Az ident#, ident»..." és ident'...' kifejezések le vannak foglalva a nyelvi szintaxisban.
  • A bare_trait_objects és az ellipsis_inclusive_range_patterns figyelmeztetéseket hibákba helyezte át.

Új a Rust 1.56-ban:

  • A Cargo.toml „[csomag]” részében hozzáadásra került a rust-version mező, amelyen keresztül meghatározhatja a Rust minimálisan támogatott verzióját a ládacsomaghoz. Ha az aktuális verzió nem egyezik a megadott paraméterrel, a Cargo hibaüzenettel leáll.
  • A "binding @ pattern" kifejezésekkel történő mintaillesztés esetén további kötések megadása is támogatott (például "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • 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:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::pánik::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::zsugorodik
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • A „const” attribútumot, amely meghatározza a konstansok helyett bármely kontextusban való használat lehetőségét, a függvényekben használják
    • std::mem::transmute
    • [T]::első
    • [T]::oszt_első
    • [T]::utolsó
    • [T]::split_last
  • A fordító az LLVM 13-as verziójára vált.
  • A támogatás második szintje az aarch64-apple-ios-sim platformon, egy harmadik szint pedig a powerpc-unknown-freebsd és riscv32imc-esp-espidf platformokon valósult meg. A harmadik szint alaptá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.

Emlékezzünk vissza, hogy a Rust a memóriabiztonságra összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas párhuzamosság elérését a feladatok végrehajtásában 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.

Forrás: opennet.ru

Hozzászólás