Rust 1.82 kiadás. Új böngésző Ruston. A Rust használata a Volvónál

Megjelent a Rust 1.82 programozási nyelv frissítése, amelyet a Mozilla projekt indított, de ma már a Rust Foundation független, nonprofit szervezete alatt fejlesztenek. A nyelv a memória biztonságos kezelésére összpontosít, és olyan eszközöket kínál, amelyek lehetővé teszik a feladatok magas párhuzamosságát, miközben elkerüli a szemétgyűjtőt és a futási időt (a futási időt alapvető inicializációra és a standard könyvtár karbantartására korlátozódik).

A Rust memória kezelésének módszerei megszüntetik a fejlesztők hibáit a mutatókkal való manipulálás során, és védelmet nyújtanak az alacsony szintű memória kezelésből adódó problémákkal szemben, mint például a már felszabadított memória területére való hivatkozás, null-pointer dereferálás, pufferméret túllépés stb. A könyvtárak terjesztésére, a build biztosítására és a függőségek kezelésére a Cargo csomagkezelő fejlesztés alatt áll. A könyvtárak elhelyezésére a crates.io tároló támogatott.

A memória biztonságos kezelése a Rustban a fordítási időben történik, a hivatkozások ellenőrzésén, az objektumok tulajdonjogának nyomon követésén, az objektumok élettartamának (láthatóságának) figyelembevételén és a memória hozzáférésének helyességének értékelésén keresztül a kód futtatásakor. A Rust emellett eszközöket biztosít az egész számok túllépésének elleni védelemhez, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza a változatlan (immutable) hivatkozások és változók fogalmát alapértelmezés szerint, és erős statikus típussal minimalizálja a logikai hibákat.

Főbb újítások:

  • A cargo csomagkezelőhöz hozzáadták az 'info' parancsot, amely információkat ad meg a csomagról a tárolóban.
  • Hozzáadták a 'use' szintaxis támogatását az 'impl Trait'-ben, amely a rejtett típusokkal kapcsolatos információkat határozza meg. Például az 'impl Trait + use ' arra utal, hogy a rejtett típusban csak az 'x' és 'T' paraméterek használhatók.
  • Javasolt egy külön szintaxis a nyers mutatók létrehozásához, amely felváltja a korábban használt makrókat: az 'addr_of!(expr)' makrót felváltotta a '&raw const expr' operátor, míg az 'addr_of_mut!(expr)' makrót a '&raw mut expr' operátor váltotta fel. struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Régi módszer nyers mutató létrehozására let ptr = std::ptr::addr_of!(p.not_aligned_field); // Új módszer nyers mutató létrehozására let ptr = &raw const p.not_aligned_field; let val = unsafe { ptr.read_unaligned() }; }
  • Lehetővé vált biztonságos (safe) függvények és 'static' élettartamú konstansok definiálása 'unsafe' jelzővel ellátott extern blokkokon belül (korábban minden elem csak 'unsafe extern'-ben lehetett): unsafe extern { pub safe static TAU: f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • A no_mangle, link_section és export_name attribútumokat, amelyek meghatározatlan viselkedést okozhatnak, most már veszélyesnek tekintik, és egyértelmű 'unsafe' megjelölést igényelnek, például: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Mintaegyezés során megengedett üres típusok, például 'enum Void {}' vagy olyan struktúrák kihagyása, amelyek láthatóan üres mezőt tartalmaznak. use std::convert::Infallible; pub fn unwrap_without_panic(x: Result) -> T { let Ok(x) = x; // 'Err' kihagyható x }
  • A lebegőpontos számok (f32 és f64) típusai esetében standardizálták a NaN (0.0/0.0) nem numerikus értékek kezelését, és engedélyezték a lebegőpontos műveletek használatát const fn-ben.
  • Az assembler beágyazások lehetővé teszik a 'const' jelzővel ellátott operátorok használatát, hogy közvetlenül használhassunk egész számú értékeket anélkül, hogy azokat előzetesen regiszterben mentenénk. const MSG: &str = «Helló, világ!\n»; unsafe { core::arch::asm!( «mov rdx, {LEN} \/\/ az utasítás 'mov rdx, 14' fog létrejönni», LEN = const MSG.len(), … ); }
  • Engedélyezett a 'static' jelzővel ellátott kifejezések címezése biztonságos kontextusban, anélkül, hogy meghatároznánk egy unsafe blokkot (a '&raw mut' és '&raw const' operátorok nem befolyásolják az operandus értékét, hanem csak egy mutató hoznak létre rá): static mut STATIC_MUT: Type = Type::new(); extern «C» { static EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
  • Új API-k kerültak a stabil kiadások közé, beleértve a metódusok és típusimplementációk stabilizálását:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]::is_sorted
    • [T]::is_sorted_by
    • [T]::is_sorted_by_key
    • Iterator::is_sorted
    • Iterator::is_sorted_by
    • Iterator::is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator for Take

      Forrás: opennet.ru
Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster