Rust 1.77 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.77 á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áadva a C karakterláncok literáljainak (c"text") támogatása, amelyek null terminált karakterrel vannak tárolva a memóriában, és a "CStr" típushoz vannak társítva. A C karakterláncok támogatása várhatóan leegyszerűsíti a null terminált karakterláncokat használó programozási nyelvek rétegeivel interakcióba lépő kód írását, és lehetővé teszi a szükséges fordítási idejű ellenőrzéseket. const HELLO: &core::ffi::CStr = c"Hello, world!";
  • Az "async fn" kifejezéssel deklarált aszinkron végrehajtású függvények mostantól lehetővé teszik a rekurziót, ami azt jelenti, hogy az ilyen függvények mostantól meghívhatják önmagukat. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Az offset_of! makró stabilizálódott. Lehetővé teszi a struktúrák, enumerációk, uniók és tuple-k mezőinek a típus elejéhez viszonyított bájt-eltolását. A gyakorlatban a makró olyan helyzetekben lehet hasznos, amikor típuspéldány hiányában a mezőeltolódás szintjén kell dolgozni. Az offset_of funkcionalitás különösen alacsony szintű komponensek, például illesztőprogramok fejlesztésekor szükséges. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
  • A Cargo csomagkezelőben a fájlok eltávolítása a hibakeresési adatokból (strip = "debuginfo") alapértelmezés szerint engedélyezve van a kiadási profilokban, kivéve, ha a hibakeresési mód explicit módon engedélyezve van a Cargo profilban, azaz ha a hibakeresési paraméter = 0.
  • A „-Zthir-unsafeck=on” opció alapértelmezés szerint engedélyezve van, ami engedélyezi a THIR (Typed High-Level Intermediate Representation) köztes reprezentáció nem biztonságos ellenőrzését.
  • Hozzáadtunk egy static_mut_refs szövésellenőrzést, amely figyelmeztetést ad ki, ha módosítható statikus értékekre mutató hivatkozásokat használunk.
  • Implementálva a „From<&[T; N]>” tulajdonság alkalmazásának lehetősége a „Cow<[T]>” típusra. fn foo(data: impl Into >) { /* … */ } fn main() { foo(&[„szia”, „világ”]); }
  • A fordító igazítást biztosít a 16 bájtos i128 és u128 típusokhoz x86 rendszerekhez.
  • 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:
    • tömb::each_ref
    • tömb::each_mut
    • mag::net
    • f32::round_ties_even
    • f64::round_ties_even
    • mem::offset_of!
    • slice::első_darab
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::last_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Kötött::térkép
    • Fájl::létrehozás_új
    • Mutex::clear_poison
    • RwLock::clear_poison
  • A 3. szintű támogatás az aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf és riscv32im-risc0-zkvm-elf platformokon valósult meg. A 3. szint alapvető támogatást nyújt, de automatizált tesztelés, hivatalos buildek vagy build-ellenőrzés nélkül.

Forrás: opennet.ru

Vásároljon megbízható tárhelyet DDoS védelemmel, VPS VDS szerverekkel rendelkező webhelyekhez 🔥 Vásároljon megbízható weboldal tárhelyet DDoS védelemmel, VPS VDS szerverekkel | ProHoster