Rust 1.87 vÀljaanne

Programmeerimiskeele Rust 1.0 vĂ€ljaandmise kĂŒmnenda aastapĂ€eva tĂ€histamisel (Rust projekt loodi 2006. aastal, versioon 0.1 valmis 2012. aastal ja esimene stabiilne versioon pakuti vĂ€lja 2015. aastal) avaldati Rust 1.87. Keele rĂ”hk on mĂ€lu ohutus kasutamisel ja see pakub vahendeid kĂ”rge ĂŒlesannete tĂ€itmise paralellismi saavutamiseks, ilma et see vajaks prĂŒgikoristajat ja runtime'i (runtime on piiratud ainult pĂ”hiiniatiliseerimise ja standardraamatukogu toetamisega).

Rustis olevad mĂ€luhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mĂ€lutöötlusest tulenevate probleemide, nagu vabanenud mĂ€lu alale juurdepÀÀs, nullosutite de-referentseerimine, mĂ€lupiiride ĂŒletamine jne. Raamatukogude levitamiseks, projekti koostamise ja sĂ”ltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mĂ€lutöötluse kompilatsiooni ajal, kontrollides viiteid, jĂ€lgides objektide omandit, arvestades objektide elutsĂŒklit (nĂ€htavust) ja hinnates mĂ€lule juurdepÀÀsu Ă”igsust koodi kĂ€itamise ajal. Rust pakub ka meetmeid enamike tĂ€isarvude ĂŒletamiste vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste algvÀÀrtustamist enne kasutamist, kĂ€sitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade minimeerimiseks.

PÔhilised uuendused:

  • Standardraamatukokku on lisatud toetus nimekamate kanalite (anonymous pipe) jaoks. Nimekamate kanalite loomiseks on ette nĂ€htud meetod std::io::pipe(), mida saab kasutada koos std::process::Commandiga standartsisendite ja vĂ€ljundite töötlemiseks, samuti stdout ja stderr voogude ĂŒhendamiseks. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("path/to/bin") /// stdout ja stderr ĂŒhendamine ĂŒhe kanaliga .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Safe-koodist on lubatud kutsuda enamikku kompilaatorisse sisseehitatud funktsioone (Intrinsics) std::arch. Muudatus kehtib std::arch sisseehitatud funktsioonidele, mis on mĂ€rgistatud unsafe vaid seoses teatud funktsionaalsusega, kui see funktsionaalsus on lubatud. NĂ€iteks, _mm256_add_epi32 saab kutsuda safe-koodist, kui rakenduses on kasutatud ‘#[target_feature(enable = "avx2")]’.
  • Assembleri plokkidest „asm!” on lubatud ĂŒleminekud Rusti keeles kirjutatud koodiplokkide juurde, mis lihtsustab madalal tasemel koodi arendamist, nĂ€iteks optimeerimiste rakendamist kernis vĂ”i seadmete vahelise suhtluse organiseerimist. Ülemineku koht assembleri kĂ€su „jmp” jaoks mÀÀratakse makros „asm!” abil uue operaatoriga „label”, mis sisaldab Rusti keeles kirjutatud koodiploki vĂ€ljendit. unsafe { asm!( "jmp {}", label { println!("Jumped from asm!"); } ); }
  • Lubatud on tĂ€pselt mÀÀrata heidetud ĂŒldtĂŒĂŒbid ja eluaeg tĂŒĂŒbi mÀÀratlemisel, kasutades tagastatud tĂŒĂŒpe impl Trait. 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; }
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
    • 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
  • MĂ€rkus 'const' rakendatud funktsioonides:
    • 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
  • Teise taseme tugi sihtplatvormile i586-pc-windows-msvc on eemaldatud. Soovitame kasutada platvormi i686-pc-windows-msvc, mis toetab SSE2 kĂ€sklusi. Platvorm i586-pc-windows-msvc kaotas mĂ”tte, kuna Windows 10 vajab SSE2 toe olemasolu, ja varasemad Windowsi vĂ€ljaanded Rusti jaoks ei ole toetatud.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster