Lëshimi i Rust 1.87

Në ditën e festimit të dekadës nga lëshimi i gjuhës së programimit Rust 1.0 (projekti Rust u themelua në vitin 2006, versioni 0.1 u formua në vitin 2012, dhe versi i parë stabil u ofrua në vitin 2015) u publikua lëshimi Rust 1.87. Gjuha është fokusuar në punimin e sigurt me memorjen dhe ofron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, duke u shmangur nga përdorimi i mbledhësit të plehrave dhe runtime (runtime zvogëlohet në inicializimin e bazës dhe mbështetje të bibliotekës standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.

Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.

Të rejat kryesore:

  • Biblioteka standarde ka shtuar mbështetje për kanalet pa emër (pipë anonime). Për të krijuar kanale pa emër është propozuar metoda std::io::pipe(), e cila mund të përdoret në kombinim me std::process::Command për të përpunuar hyrjet dhe daljet standarde, 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());
  • Është lejuar thirrja nga kodi të sigurt i shumicës së funksioneve të ndërtuara në kompilator (Intrinsics) std::arch. Ndryshimi aplikohet në funksionet e ndërtuara std::arch, të cilat janë shënuar si unsafe vetëm për shkak të lidhjes me një funksionalitet të caktuar, nëse ky funksionalitet është aktivizuar. Për shembull, _mm256_add_epi32 mund të thirret nga kodi i sigurt, nëse në aplikacionin përdoret ‘#[target_feature(enable = «avx2»)]’.
  • Është lejuar kalimi nga blloqet «asm!» me kod assembler në blloqet me kod në gjuhën Rust, që lehtëson zhvillimin e kodit të nivelit të ulët, p.sh., realizimin e optimizimeve në bërthamë ose organizimin e ndërveprimit me harduerin. Pika e kalimit për komandën assembler «jmp» përcaktohet në makron «asm!» me operandin e ri «label», i cili përmban një shprehje bllok me kod në gjuhën Rust. unsafe { asm!( «jmp {}», label { println!(«Jumped from asm!»); } ); }
  • Është lejuar përcaktimi i saktë i llojeve të kapura dhe jetëgjatësive në definicionet e tipazheve 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ë sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
    • 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
  • T symboli «const» është aplikuar në funksionet:
    • 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
  • Ka hiqet niveli i dytë i mbështetjes për platformën e synuar i586-pc-windows-msvc. Rekomandohet përdorimi i platformës i686-pc-windows-msvc, e cila ofron mbështetje për instrukcionet 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ë vjetra të Windows në Rust nuk mbështeten.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster