A Rust 1.75 és az unikernel Hermit 0.6.7 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.75 á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 az „async fn” és az „->impl Trait” jelölések használatát a privát tulajdonságokban. Például a „->impl Trait” használatával írhat egy vonásmódszert, amely egy iterátort ad vissza: trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator { self.items.iter().clóned() } }

    Az "async fn" használatával is létrehozhat tulajdonságokat: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // a következőre bővül: // fn fetch(&self, url: Url) -> impl Future; }

  • Hozzáadott API a mutatókhoz viszonyított bájteltolások kiszámításához. Ha csupasz mutatókkal dolgozik („*const T” és „*mut T”), akkor előfordulhat, hogy műveletekre van szükség ahhoz, hogy eltolást adjon a mutatóhoz. Korábban erre lehetett olyan konstrukciót használni, mint a „::add(1)”, hozzáadva a „size_of::()” méretének megfelelő bájtok számát. Az új API leegyszerűsíti ezt a műveletet, és lehetővé teszi a bájteltolások manipulálását anélkül, hogy a típusokat először a „*const u8” vagy a „*mut u8”-ba öntnénk.
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Folytatjuk a munkát a rustc fordító teljesítményének növelésére. Hozzáadtuk a BOLT optimalizálót, amely a link utáni szakaszban fut, és egy előre elkészített végrehajtási profilból származó információkat használ. A BOLT használatával körülbelül 2%-kal felgyorsíthatja a fordító végrehajtását a librustc_driver.so könyvtárkód elrendezésének megváltoztatásával a processzor gyorsítótárának hatékonyabb használata érdekében.

    Tartalmazza a rustc fordító felépítését a "-Ccodegen-units=1" opcióval az LLVM optimalizálás minőségének javítása érdekében. Az elvégzett tesztek a „-Ccodegen-units=1” felépítés esetében hozzávetőleg 1.5%-os teljesítménynövekedést mutatnak. A hozzáadott optimalizálás alapértelmezés szerint csak az x86_64-unknown-linux-gnu platformon engedélyezett.

    A korábban említett optimalizálásokat a Google tesztelte, hogy csökkentsék az Android platform Rust nyelven írt komponenseinek felépítési idejét. A „-C codegen-units=1” használata az Android készítése során lehetővé tette, hogy az eszközkészlet méretét 5.5%-kal csökkentsük, teljesítményét pedig 1.8%-kal növeljük, miközben magának az eszközkészletnek a felépítési ideje majdnem megduplázódott.

    A link-time szemétgyűjtés ("--gc-sections") engedélyezése akár 1.9%-os teljesítménynövekedést is eredményezett, a link-time optimalizálás (LTO) pedig akár 7.7%-ot, a profilalapú optimalizálás (PGO) pedig akár 19.8%-ot is elérhetett. A döntőben a BOLT segédprogrammal optimalizálták, ami lehetővé tette az építési sebesség 24.7%-os növekedését, de az eszközkészlet mérete 10.9%-kal nőtt.

    A Rust 1.75 és az unikernel Hermit 0.6.7 programozási nyelv kiadása

  • 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:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • Fájl::set_modified
    • Fájl::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opció::as_slice
    • Opció::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • A "const" attribútum, amely meghatározza, hogy konstansok helyett bármilyen környezetben használható, a függvényekben használatos:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::nullázva
    • mem::diszkrimináns
    • mem::nullázva
  • A harmadik támogatási szint a csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd és mipsel-unknown-netbsd platformokon 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.

Emellett megjegyezhetjük a Hermit projekt új verzióját is, amely egy speciális rendszermagot (unikernelt) fejleszt, Rust nyelven írva, amely eszközöket biztosít olyan önálló alkalmazások készítéséhez, amelyek hipervizoron vagy csupasz hardveren futhatnak további rétegek nélkül. és operációs rendszer nélkül. Felépítéskor az alkalmazás statikusan kapcsolódik egy könyvtárhoz, amely önállóan valósítja meg az összes szükséges funkciót, anélkül, hogy az operációs rendszer kerneléhez és rendszerkönyvtáraihoz lenne kötve. A projekt kódja Apache 2.0 és MIT licenc alatt kerül terjesztésre. Az Assembly támogatja a Rust, Go, Fortran, C és C++ nyelven írt alkalmazások önálló végrehajtását. A projekt egy saját rendszerbetöltőt is fejleszt, amely lehetővé teszi a Hermit elindítását QEMU és KVM használatával.

Forrás: opennet.ru

Hozzászólás