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
