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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster