Rust 1.87 kiadás

A Rust 1.0 programozási nyelv kiadásának tizedik évfordulóján (a Rust projekt 2006-ban indult, az 0.1-es verzió 2012-ben készült el, az első stabil verziót pedig 2015-ben javasolták) megjelent a Rust 1.87. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a feladatok magas párhuzamosságú végrehajtásához, mindezt anélkül, hogy szemétgyűjtőt és futtatási időt (runtime) használna (a futtatási idő a standard könyvtár alap inicializálására és 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 standard könyvtárba bevezetésre került az anonim csatornák (anonymous pipe) támogatása. Az anonim csatornák létrehozására a std::io::pipe() metódus javasolt, amelyet a std::process::Command-dal lehet használni a standard bemeneti és kimeneti folyamatok feldolgozásához, valamint a stdout és stderr folyamatok egyesítésére. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("path/to/bin") // stdout és stderr egy csatornába egyesítése .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Engedélyezve van a safe-kódból történő hívás a legtöbb beépített függvényre (Intrinsics) std::arch. A módosítás a std::arch beépített függvényeire vonatkozik, amelyeket csak a bizonyos funkcionalitáshoz való kötődés miatt jelöltek unsafe-ként, ha ez a funkcionalitás engedélyezve van. Például az _mm256_add_epi32 biztonságos kódból hívható, ha az alkalmazásban a '#[target_feature(enable = "avx2")]' van használatban.
  • Az „asm!” blokkokból, amelyek assembler kódot tartalmaznak, megengedett az ugrások végrehajtása Rust nyelvű kódokra, ami megkönnyíti az alacsony szintű kód fejlesztését, például optimalizációk végrehajtását a kernelben vagy a hardverrel való kölcsönhatás szervezését. Az ugrási pont az assembler utasítás számára a "jmp" az „asm!” makróban van megadva egy új operátorral, a "label"-lel, amely tartalmaz egy blokkváltozatot Rust nyelven. unsafe { asm!( "jmp {}", label { println!("Ugrás asm-ból!"); } ); }
  • Lehetővé teszi pontosan megadni a megszerzett általános típusokat és az élettartamokat a típusdefiníciókban az impl Trait által visszaadott típusok használatával. trait Foo { fn method(&'a self) -> impl Sized; type Implicit1: Sized; fn method_desugared(&'a self) -> Self::Implicit1; fn precise(&'a self) -> impl Sized + use; type Implicit2: Sized; fn precise_desugared(&'a self) -> Self::Implicit2; }
  • Ú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:
    • Vec::extract_if
    • vec::ExtractIf
    • LinkedList::extract_if
    • linked_list::ExtractIf
    • ::split_off
    • ::split_off_mut
    • ::split_off_first
    • ::split_off_first_mut
    • ::split_off_last
    • ::split_off_last_mut
    • String::extend_from_within
    • os_str::Display
    • OsString::display
    • OsStr::display
    • io::pipe
    • io::PipeReader
    • io::PipeWriter
    • impl From for OwnedHandle
    • impl From for OwnedHandle
    • impl From for Stdio
    • impl From for Stdio
    • impl From for OwnedFd
    • impl From for OwnedFd
    • Box<MaybeUninit>::write
    • impl TryFrom<Vec> for String
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • NonNull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::cast_signed
    • NonZero::::cast_signed.
    • ::cast_unsigned.
    • NonZero::::cast_unsigned.
    • ::is_multiple_of
    • ::unbounded_shl
    • ::unbounded_shr
    • ::unbounded_shl
    • ::unbounded_shr
    • ::midpoint
    • ::from_utf8
    • ::from_utf8_mut
    • ::from_utf8_unchecked
    • ::from_utf8_unchecked_mut
  • A «const» jelző alkalmazása a funkciókban:
    • core::str::from_utf8_mut
    • ::copy_from_slice
    • SocketAddr::set_ip
    • SocketAddr::set_port,
    • SocketAddrV4::set_ip
    • SocketAddrV4::set_port,
    • SocketAddrV6::set_ip
    • SocketAddrV6::set_port
    • SocketAddrV6::set_flowinfo
    • SocketAddrV6::set_scope_id
    • char::is_digit
    • char::is_whitespace
    • <N::as_flattened
    • <N::as_flattened_mut
    • String::into_bytes
    • String::as_str
    • String::capacity
    • String::as_bytes
    • String::len
    • String::is_empty
    • String::as_mut_str
    • String::as_mut_vec
    • Vec::as_ptr
    • Vec::as_slice
    • Vec::capacity
    • Vec::len
    • Vec::is_empty
    • Vec::as_mut_slice
    • Vec::as_mut_ptr
  • A célplatform i586-pc-windows-msvc második szintű támogatása eltávolítva. Ajánlott az i686-pc-windows-msvc platform használata, amely támogatja az SSE2 utasításokat. Az i586-pc-windows-msvc platform már nem releváns, mivel a Windows 10 SSE2 támogatását igényli, és a Rust nem támogatja a régebbi Windows kiadásokat.

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