TĂ€histades Rust programmeerimiskeele 1.0 vĂ€ljaandmise kĂŒmnendat aastapĂ€eva (Rust projekt loositi 2006. aastal, versioon 0.1 valmis 2012. aastal ja esimene stabiilne versioon pakuti vĂ€lja 2015. aastal), ilmus Rust 1.87. Keel keskendub mĂ€lu ohutule kasutamisele ja pakub vahendeid kĂ”rge paralleelsuse saavutamiseks ĂŒlesannete tĂ€itmisel, samas loobudes prĂŒgikorjamise ja runtime'i (runtime'i laiemalt piirab pĂ”hialustamine ja standardraamatukogu hooldamine).
MÀluga töötamise meetodid Rust'is vabastavad arendajad pointerite manipulatsiooni vigadest ja kaitsevad neid probleemide eest, mis tulenevad madala taseme mÀlu haldamisest, nagu mÀlualale pÀrast selle vabastamist juurdepÀÀs, null-pointerite dereferentseerimine, puhverserveri piiridest vÀljumine jne. Raamatukogude levitamiseks, kokkupaneku tagamiseks ja sÔltuvuste haldamiseks arendatakse paketihaldurit Cargo. Raamatukogude majutamiseks toetatakse repoturite crates.io.
MĂ€luhĂŒgieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jĂ€lgimise, objektide eluaja (vaateala) arvestamise ja mĂ€lule juurdepÀÀsu korrektuse hindamise kaudu koodi tĂ€itmise ajal. Rust pakub ka vahendeid tĂ€isarvude ĂŒlevoolude vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mĂ”istet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade vĂ€hendamiseks.
Peamised uuendused:
- Standardraamatukogusse on lisatud anonĂŒĂŒmsete kanalisatsioonide tugi. AnonĂŒĂŒmsete kanalisatsioonide loomiseks on pakutud meetodit std::io::pipe(), mida saab kasutada koos std::process::Command'iga, et töödelda standardseid sisend- ja vĂ€ljundvooge, 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 ĂŒhte kanalisse .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
- Kehtib vĂ”imalus kutsuda enamikke kompilaatorisse sisse ehitatud funktsioone (Intrinsics) std::arch safe-koodist. Muudatus kehtib std::arch sisseehitatud funktsioonidele, mis on tĂ€histatud unsafe'ina ainult teatud funktsionaalsuse sidumise tĂ”ttu, kui see funktsionaalsus on lubatud. NĂ€iteks _mm256_add_epi32 saab kutsuda safe-koodist, kui rakenduses on kasutusel â#[target_feature(enable = "avx2")]â.
- Asm! plokkides assemblerikoodiga on lubatud hĂŒpata Rusti keeles kirjutatud koodiplokkidesse, mis lihtsustab madala taseme koodi arendamist, nĂ€iteks optimeerimiste rakendamist kernis vĂ”i seadmete vahelise suhtluse korraldamist. HĂŒppepunkt assemblerikĂ€sule "jmp" mÀÀratakse makros "asm!" abil uue operandiga "label", mis sisaldab Rusti keeles kirjutatud koodiploki vĂ€ljendit. unsafe { asm!( "jmp {}", label { println!("HĂŒppas asm! seest!"); } ); }
- Lubatud on tĂ€pselt mÀÀrata haaratud ĂŒldtĂŒĂŒbid ja eluea tĂŒĂŒpide mÀÀratlemisel, kasutades tagastatavaid 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; }
- Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒbispetsiifikatsioonide 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Ă€rgis âconstâ on 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 platvormile i586-pc-windows-msvc on eemaldatud. Soovitame kasutada platvormi i686-pc-windows-msvc, mis toetab SSE2 kÀsku. Platvorm i586-pc-windows-msvc on oma mÔtte kaotanud, kuna Windows 10 nÔuab SSE2 tuge ning varasemad Windowsi versioonid Rustis ei ole toetatud.
Allikas: opennet.ru
