Lëshimi i Rust 1.87

Në ditën e festimit të dhjetëvjetorit të lëshimit të gjuhës së programimit Rust 1.0 (projekti Rust u themelua në vitin 2006, lëshimi 0.1 u formua në vitin 2012, dhe versioni i parë stabil u propozua në vitin 2015) u publikua rishikimi Rust 1.87. Gjuha fokusohet në punën e sigurt me memorjen dhe ofron mjete për të arritur një paralelizëm të lartë në ekzekutimin e detyrave, duke shmangur përdorimin e mbledhësit të plehrave dhe runtime (runtime përfundon me inicializimin bazë dhe mbështetje për bibliotekën standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • Biblioteka standarde pĂ«rfshin mbĂ«shtetje pĂ«r kanalet e paemĂ«ruar (anonymous pipe). PĂ«r tĂ« krijuar kanale tĂ« paemĂ«ruar, propozohet metoda std::io::pipe(), e cila mund tĂ« pĂ«rdoret sĂ« bashku me std::process::Command pĂ«r tĂ« pĂ«rpunuar rrjedhat standarde tĂ« inputit dhe outputit, si dhe pĂ«r tĂ« bashkuar rrjedhat stdout dhe stderr. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new(«path/to/bin») // bashkimi i stdout dhe stderr nĂ« njĂ« kanal .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Lejohet thirrja nga kodi tĂ« sigurt e shumicĂ«s sĂ« funksioneve tĂ« integruara (Intrinsics) std::arch. Ndryshimi aplikohet te funksionet e integruara std::arch, tĂ« cilat janĂ« tĂ« shĂ«nuara si unsafe vetĂ«m pĂ«r shkak tĂ« lidhjes me funksionalitete tĂ« caktuara, nĂ«se kĂ«to funksionalitete janĂ« aktivizuar. PĂ«r shembull, _mm256_add_epi32 mund tĂ« thirret nga kodi i sigurt, nĂ«se aplikacioni pĂ«rdor ‘#[target_feature(enable = «avx2»)]’.
  • Nga blloqet «asm!» me kod assembler lejohet kalimi nĂ« blloqe me kod nĂ« gjuhĂ«n Rust, çka lehtĂ«son zhvillimin e kodit me nivel tĂ« ulĂ«t, pĂ«r shembull, realizimin e optimizimeve nĂ« bĂ«rthamĂ« ose organizimin e bashkĂ«punimit me pajisjet. PikĂ«kalimi pĂ«r komandĂ«n assembler «jmp» caktohet nĂ« makron «asm!» pĂ«rmes njĂ« operandi tĂ« ri «label», qĂ« pĂ«rmban njĂ« shprehje blloku me kod nĂ« gjuhĂ«n Rust. unsafe { asm!( «jmp {}», label { println!(«Kaluar nga asm!»); } ); }
  • ËshtĂ« e lejuar tĂ« specifikoni saktĂ«sisht llojet e pĂ«rgjithshme tĂ« kapura dhe jetĂ«gjatĂ«sinĂ« nĂ« pĂ«rkufizimet e tipave duke pĂ«rdorur tipet e kthimit 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; }
  • NjĂ« grup i ri API u kalua nĂ« kategorinĂ« e stabilizuar, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« trait-Ă«ve:
    • 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 pĂ«r OwnedHandle
    • impl From pĂ«r OwnedHandle
    • impl From pĂ«r Stdio
    • impl From pĂ«r Stdio
    • impl From pĂ«r OwnedFd
    • impl From pĂ«r OwnedFd
    • Box<MaybeUninit>::write
    • impl TryFrom<Vec> pĂ«r 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
  • Priznaku «const» aplicohet nĂ« funksione:
    • 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
  • Niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n e synuar i586-pc-windows-msvc Ă«shtĂ« hequr. Rekomandohet tĂ« pĂ«rdorni platformĂ«n i686-pc-windows-msvc, e cila ka mbĂ«shtetje pĂ«r instruktionet SSE2. Platforma i586-pc-windows-msvc ka humbur kuptimin, pasi pĂ«r Windows 10 kĂ«rkohet mbĂ«shtetje pĂ«r SSE2, dhe versionet mĂ« tĂ« hershme tĂ« Windows nuk mbĂ«shteten nĂ« Rust.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster