Die vrystelling van die stelselprogrammeertaal Rust 1.53, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die vaandel van die onafhanklike nie-winsgewende organisasie Rust Foundation, is gepubliseer. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied die middele om hoΓ« taakparallellisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).
Rust se outomatiese geheuebestuur red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ββas gevolg van laevlakgeheuemanipulasie, soos toegang tot 'n geheuearea nadat dit vrygestel is, herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.
Belangrikste innovasies:
- ΠΠ»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠΈΠΏΠ°ΠΆ IntoIterator, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ: for i in [1, 2, 3] { .. }
Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π² ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
Π Π°Π½Π΅Π΅ IntoIterator Π±ΡΠ» ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΌΠ°ΡΡΠΈΠ²Ρ, Ρ.Π΅. Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ»ΠΎΠΊ (Β«&[1, 2, 3]Β») ΠΈΠ»ΠΈ Β«[1, 2, 3].iter()Β». Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ IntoIterator Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΌΠ΅ΡΠ°Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ, Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΌ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° array.into_iter() Π² (&array).into_iter(). Π£ΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ΅ΡΠΈΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠΌ ΠΏΡΡΡΠΌ β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ array.into_iter() Π² (&array).into_iter(), ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΠΏΠ°ΠΆΠ° IntoIterator, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Β«.into_iter()Β» ΠΈ Π½Π΅ ΠΊΠ°ΡΠ°ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² ΡΠΎΡΠΌΠ΅ Β«in [1, 2, 3]Β», Β«iter.zip([1, 2, 3])Β», Β«IntoIterator::into_iter([1, 2, 3])Β».
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Β«|Β» (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ OR) Π² Π»ΡΠ±ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Β«Some(1) | Some(2)Β» ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Β«Some(1 | 2)Β»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅-ASCII ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ , Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π»ΡΠ±ΡΡ Π½Π°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Unicode UAX 31, Π½ΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² emoji. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Π·Π½ΡΡ , Π½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΡ ΠΏΠΎ Π½Π°ΡΠ΅ΡΡΠ°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. const BLΓ HAJ: &str = Β«π¦Β»; struct δΊΊ { εε: String, } let Ξ± = 1; let ο½os = 2; warning: identifier pair considered confusable between βο½β and βsβ
- 'n Nuwe gedeelte van API's is na die stabiele kategorie oorgedra, insluitend die volgende gestabiliseer:
- array::from_ref
- array::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::retain
- BTreeMap::retain
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- Duration::ZERO
- Duration::MAX
- Duration::is_zero
- Duration::saturating_add
- Duration::saturating_sub
- Duur::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- IntoIterator Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²
- {integer}::BITS
- io::Error::Unsupported
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- Option::insert
- Ordering::is_eq
- Ordering::is_ne
- Ordering::is_lt
- Ordering::is_gt
- Ordering::is_le
- Ordering::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- Peekable::peek_mut
- Rc::increment_strong_count
- Rc::decrement_strong_count
- slice::IterMut::as_slice
- AsRef<[T]> Π΄Π»Ρ slice::IterMut
- impl SliceIndex Π΄Π»Ρ (Bound<usize>, Bound<usize>)
- Vec::extend_from_within
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ wasm64-unknown-unknown. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°.
- ΠΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Cargo ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Β«mainΒ» Π΄Π»Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ (HEAD). ΠΠ»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΈΠΌΡ main Π²ΠΌΠ΅ΡΡΠΎ master, Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ branch = Β«mainΒ».
- In die samesteller word die vereistes vir die minimum weergawe van LLVM verhoog tot LLVM 10.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Π°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² ΡΠ΄ΡΠΎ Linux ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Rust. Π Π°Π±ΠΎΡΠ° Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Prossimo ΠΏΠΎΠ΄ ΡΠ³ΠΈΠ΄ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ISRG (Internet Security Research Group), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅Π΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Letβs Encrypt ΠΈ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ HTTPS ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠ»Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΠΈΠ³Π΅Π»Ρ ΠΡ Π΅Π΄Π° (Miguel Ojeda), Π°Π²ΡΠΎΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Rust-for-Linux. Π Π°Π½Π΅Π΅ ISRG ΠΈ Google ΡΠΆΠ΅ ΠΏΡΠΎΡΠΈΠ½Π°Π½ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ HTTP-Π±ΡΠΊΠ΅Π½Π΄Π° Π΄Π»Ρ ΡΡΠΈΠ»ΠΈΡΡ curl ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ TLS-ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ http-ΡΠ΅ΡΠ²Π΅ΡΠ° Apache.
ΠΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Microsoft ΠΈ Google ΠΎΠΊΠΎΠ»ΠΎ 70% ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ Π²ΡΠ·Π²Π°Π½Ρ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° Rust Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ΄ΡΠ°, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Π²ΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ°.
Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, hou van objekeienaarskap en objekleeftyd (omvang), asook deur evaluering van die korrektheid van geheuetoegang tydens kode-uitvoering. Roes bied ook beskerming teen heelgetal-oorvloei, vereis dat veranderlikes geΓ―nisialiseer word voor gebruik, hanteer foute beter in die standaardbiblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, en bied sterk statiese tik om logiese foute te minimaliseer.
Bron: opennet.ru