A Rust 1.74 programozási nyelv kiadása. RustVMM audit. Binder újraírása Rozsdában

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.74 á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 a szöszvizsgálatok konfigurálását a Cargo.toml fájlon keresztül a csomagkezelő jegyzékével. A szöszbeállítások, például a válaszszint (tiltás, megtagadás, figyelmeztetés, engedélyezés) meghatározásához új „[lints]” és „[workspace.lints]” szakaszok javasoltak, amelyek módosítását a rendszer figyelembe veszi a döntés meghozatalakor. újjáépítés. Például a „-F”, „-D”, „-W” és „-A” jelzők megadása helyett a „#![forbid(unsafe_code)]” és „#![deny(clippy) összeállításakor vagy hozzáadásakor :” attribútumok a kódhoz) :enum_glob_use)]" mostantól használható a rakományjegyzékben: [lints.rust] unsafe_code = "tiltás" [lints.clippy] enum_glob_use = "deny"
  • A Crate csomagkezelő hozzáadta a hitelesítés lehetőségét, amikor lerakathoz csatlakozik. Az alapcsomag támogatja a hitelesítési paraméterek elhelyezését Linux hitelesítő adattárolókban (libsecret alapján), macOS-ben (Keychain) és Windowsban (Windows Credential Manager), de a rendszer kezdetben moduláris, és lehetővé teszi a különböző szolgáltatókkal való munka megszervezését a tárolás és a tárolás érdekében. tokenek generálására például egy beépülő modul készült az 1Password jelszókezelő használatához. A lerakat minden művelethez megkövetelheti a hitelesítést, nem csak a csomagok közzétételének megerősítéséhez. ~/.cargo/config.toml [nyilvántartás] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • A visszatérési típusú vetületek támogatása (impl_trait_projections) stabilizálva lett, lehetővé téve a Self és a T::Assoc említését az olyan visszatérési típusokban, mint az "async fn" és a "->impl Trait". struct Burkolat<'a, T>(&'a T); // Átlátszatlan visszatérési típusok, amelyek megemlítik a "Self" szót: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Jellemző<'_> for () { type Assoc = (); fn new() {} } // Átlátszatlan visszatérési típusok, amelyek egy társított típust említenek: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • 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:
  • A "const" attribútum, amely meghatározza, hogy konstansok helyett bármilyen környezetben használható, a függvényekben használatos:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • mag::szám::Telítő
    • impl For std::process::Stdio
    • impl For std::process::Stdio
    • impl For std::process::Child{Stdin, Stdout, Stderr}
    • impl For std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Hiba::egyéb
    • impl TryFrom u16 számára
    • impl From<&[T; N]>Vec
    • impl From<&mut [T; N]>Vec
    • impl From<[T; N]> az Arc<[T]> esetén
    • impl From<[T; N]> Rc<[T]> esetén
  • A fordító, az eszközkészlet, a szabványos könyvtár és a generált alkalmazás-végrehajtási fájlok fokozott követelményeket támasztanak az Apple platformokkal szemben, és már legalább a 10.12-ban kiadott macOS 10 Sierra, iOS 10 és tvOS 2016 futtatásához szükséges.
  • A támogatás harmadik szintje az i686-pc-windows-gnullvm platformon valósult meg. 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.
  • A lolongarch64-unknown-none célplatform támogatásának második szintje megvalósult. A támogatás második szintje összeszerelési garanciával jár.

Ezen túlmenően a Rust nyelvvel kapcsolatos két esemény is megjegyezhető:

  • A nyílt forráskódú projektek biztonságának erősítésére létrehozott OSTIF (Open Source Technology Improvement Fund) nyilvánosságra hozta a RustVMM projekt auditjának eredményét, amely a feladatspecifikus hipervizorok és virtuálisgép-monitorok (VMM) létrehozásához nyújt komponenseket. A projekt fejlesztésében olyan cégek vesznek részt, mint az Intel, az Alibaba, az Amazon, a Google, a Linaro és a Red Hat. Az Intel Cloud Hypervisor és a Dragonball hipervizorokat RustVMM alapján fejlesztik. Az audit megerősítette a kódbázis magas minőségét, valamint a maximális biztonság elérését célzó technikák alkalmazását az architektúrában és a megvalósításban. Az ellenőrzés során 6 olyan problémát azonosítottak, amelyek nem gyakoroltak közvetlen hatást a biztonságra.
  • A Google bemutatta a Binder interprocess kommunikációs mechanizmus Rust nyelvre átírt új megvalósítását a Linux kernel fejlesztői levelezőlistáján. Az átdolgozást egy projekt részeként hajtották végre, amelynek célja a biztonság megerősítése, a biztonságos programozási technikák népszerűsítése és a problémák azonosításának hatékonyságának növelése az Android memóriával való munka során (az Androidban azonosított összes veszélyes sebezhetőség körülbelül 70%-át a memóriával való munka során fellépő hibák okozzák ). A Binder in Rust implementációja funkcionalitás tekintetében egyenlőséget ért el az eredeti C nyelvű verzióval, átmegy minden AOSP (Android Open-Source Project) teszten, és használható firmware-kiadások létrehozására. Mindkét implementáció teljesítménye megközelítőleg azonos szinten van (eltérések -1.96% és +1.38%).

Forrás: opennet.ru

Hozzászólás