Rust 1.66 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.66 á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:

  • Az egész számokat tartalmazó felsorolásokban (a "#[repr(Int)]" attribútum) megengedett a diszkrimináns explicit feltüntetése (a felsorolásban szereplő változatszám), még akkor is, ha a felsorolás mezőket tartalmaz. #[repr(u8)] enum Foo { A(u8), # diszkrimináns 0 B(i8), # diszkrimináns 1 C(bool) = 42, # diszkrimináns 42 }
  • Hozzáadott függvény core::hint::black_box, amely egyszerűen visszaadja a kapott értéket. Mivel a fordító úgy gondolja, hogy ez a függvény csinál valamit, a black_box függvény segítségével letiltható a fordítói ciklusok optimalizálása kódteljesítmény-teszteléskor vagy generált gépi kód vizsgálatakor (hogy a fordító ne tekintse használtnak a kódot, és ne távolítsa el). Például az alábbi példában a black_box(v.as_ptr()) megakadályozza, hogy a fordító azt gondolja, hogy a v vektort nem használják. használd az std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • A "cargo" csomagkezelő felajánlja a "remove" parancsot, amely lehetővé teszi a függőségek eltávolítását a Cargo.toml jegyzékből a parancssorból.
  • 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:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{első, utolsó, pop_első, pop_utolsó}
    • BTreeMap::{első_kulcsérték, utolsó_kulcsérték, első_bejegyzés, utolsó_bejegyzés, pop_első, pop_utolsó}
    • WASI használatakor vegyen fel AsFd-megvalósításokat az stdio zártípusokhoz.
    • impl TryFrom > Box<[T; N]>
    • core::hint::black_box
    • Időtartam::try_from_secs_{f32,f64}
    • Opció:: unzip
    • std::os::fd
  • A "..X" és a "..=X" tartomány megengedett a sablonokban.
  • A rustc fordító és az LLVM háttérrendszer felépítése során az LTO (Link Time Optimization) és a BOLT (Bináris optimalizálási és elrendezési eszköz) optimalizálási módokat használjuk a kapott kód teljesítményének növelésére és a memóriafelhasználás csökkentésére.
  • Megvalósított 5. szintű támogatás az armv5te-none-eabi és thumbvXNUMXte-none-eabi platformokhoz. A harmadik szint alapvető támogatást jelent, de automatikus tesztelés, hivatalos buildek közzététele és a kód felépítési képességének ellenőrzése nélkül.
  • Támogatás hozzáadva a macOS általános könyvtárakhoz való kapcsolódáshoz.

Ezenkívül megjegyezhetjük, hogy a Rust nyelv (gccrs) front-end fordítója bekerült a GCC kódbázisba. A frontend a GCC 13 ágban található, amely 2023 májusában fog megjelenni. A GCC 13-tól kezdődően a szabványos GCC eszközkészlet használható lesz Rust programok fordítására anélkül, hogy telepíteni kellene az LLVM fejlesztésekkel épített rustc fordítót. A GCC 13 Rust implementációja béta állapotú lesz, alapértelmezés szerint nincs engedélyezve.

Forrás: opennet.ru

Hozzászólás