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
