Rust 1.58 programozási nyelv kiadás

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független nonprofit szervezet égisze alatt kifejlesztett Rust 1.58 általános célú programozá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 sorformázó blokkokban a sorok után kifejezetten felsorolt ​​változók számmal és névvel való helyettesítésének korábban elérhető lehetősége mellett megvalósul az a lehetőség, hogy tetszőleges azonosítókat helyettesítsenek az „{azonosító}” kifejezés sorba való hozzáadásával. Például: // Korábban támogatott konstrukciók: println!("Hello, {}!", get_person()); println!("Szervusz, {0}!", get_person()); println!("Szervusz, {személy}!", személy = get_person()); // most megadhatod, hogy let person = get_person(); println!("Szia, {személy}!");

    Az azonosítók közvetlenül is megadhatók a formázási beállításokban. let (szélesség, pontosság) = get_format(); for (név, pontszám) in get_scores() { println!("{név}: {score:width$.precision$}"); }

    Az új helyettesítés minden olyan makróban működik, amely támogatja a karakterlánc-formátum meghatározását, a „pánik” makró kivételével. a Rust nyelv 2015-ös és 2018-as verziójában, amelyben a pánik!("{ident}") szabályos karakterláncként van kezelve (a Rust 2021-ben a helyettesítés működik).

  • Az std::process::Command struktúra Windows platformon úgy módosult, hogy a parancsok végrehajtásakor biztonsági okokból már nem keresi a végrehajtható fájlokat az aktuális könyvtárban. Az aktuális könyvtár kizárva, mert rosszindulatú kód futtatására használható, ha a programok nem megbízható könyvtárakban futnak (CVE-2021-3013). Az új végrehajtható észlelési logika magában foglalja a Rust könyvtárak, az alkalmazáskönyvtárak, a Windows rendszerkönyvtárak és a PATH környezeti változóban megadott könyvtárak keresését.
  • A szabványos könyvtár kibő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, amelyek abból fakadnak, ha egy függvény értéket változtat, nem pedig új értéket ad vissza.
  • 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:
    • Metaadatok::is_symlink
    • Path::is_symlink
    • {egész szám}::telítő_div
    • Opció::unwrap_unchecked
    • Eredmény::unwrap_unchecked
    • Eredmény::unwrap_err_unchecked
  • A "const" attribútum, amely meghatározza, hogy konstansok helyett bármilyen környezetben használható, a függvényekben használatos:
    • Időtartam::új
    • Időtartam::checked_add
    • Időtartam::saturating_add
    • Időtartam::checked_sub
    • Időtartam::saturating_sub
    • Időtartam::checked_mul
    • Időtartam::saturating_mul
    • Időtartam::checked_div
  • A „*const T” mutatók hivatkozásának megszüntetése „const” kontextusban engedélyezett.
  • A Cargo csomagkezelőben a rust_version mező hozzáadásra került a csomag metaadataihoz, és a „--message-format” opció a „cargo install” parancshoz.
  • A fordító támogatja a CFI (Control Flow Integrity) védelmi mechanizmust, amely minden közvetett hívás előtt ellenőrzéseket ad, hogy felderítse a meghatározatlan viselkedés bizonyos formáit, amelyek potenciálisan a normál végrehajtási sorrend (vezérlőfolyamat) megsértéséhez vezethetnek a olyan exploitok használata, amelyek megváltoztatják a függvények memóriájában tárolt mutatókat.
  • A fordító támogatja az LLVM lefedettség-összehasonlítási formátum 5. és 6. verzióját, amelyeket a tesztelés során a kódlefedettség értékelésére használnak.
  • A fordítóprogramban az LLVM minimális verziójára vonatkozó követelményeket LLVM 12-re emelik.
  • Az x86_64-unknown-none platform támogatásának harmadik szintje megvalósult. 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.

Ezenkívül megjegyezzük, hogy a Microsoft közzétette a Rust for Windows 0.30 könyvtárak kiadását, amelyek lehetővé teszik a Rust nyelv használatát a Windows operációs rendszerhez való alkalmazások fejlesztéséhez. A készlet két ládacsomagot tartalmaz (windows és windows-sys), amelyeken keresztül Rust programokban érheti el a Win API-t. Az API-támogatás kódja dinamikusan generálódik az API-t leíró metaadatokból, ami lehetővé teszi, hogy ne csak a meglévő Win API-hívásokhoz, hanem a jövőben megjelenő hívásokhoz is támogatást valósítson meg. Az új verzió támogatja az UWP (Universal Windows Platform) célplatformot, és megvalósítja a Handle és Debug típusokat.

Forrás: opennet.ru

Hozzászólás