UtgÄvan av programmeringssprÄket Rust 1.53, som grundades av Mozilla men numera utvecklas under ledning av den oberoende, ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering, erbjuder automatisk minneshantering och tillhandahÄller verktyg för att uppnÄ hög parallellism i uppgiftens utförande, utan att anvÀnda en garbage collector eller runtime (runtime Àr begrÀnsad till grundlÀggande initialisering och stöd för standardbiblioteket).
Den automatiska minneshanteringen i Rust befriar utvecklaren frÄn fel vid hantering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minneshantering, sÄsom att referera till minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, och liknande. För distribution av bibliotek, byggnation och hantering av projektberoenden utvecklas paketadministratören Cargo. För att lagra bibliotek stöds förvaringsplatsen crates.io.
Huvudsakliga nyheter:
- För arrayer har en trait IntoIterator implementerats, vilket gör det möjligt att iterera över en array elementvÀrden: for i in [1, 2, 3] { .. }
Det har ocksÄ blivit möjligt att skicka arrayer till metoder som accepterar iterators, till exempel: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
Tidigare var IntoIterator endast implementerad för referenser till arrayer, vilket innebar att man behövde anvĂ€nda referenser (â&[1, 2, 3]â) eller â[1, 2, 3].iter()â för att iterera över vĂ€rden. Implementeringen av IntoIterator för arrayer stötte pĂ„ problem med kompatibilitet, orsakade av en tidigare tillagd omvandling i kompilatorn som omvandlade metoden array.into_iter() till (&array).into_iter(). Dessa problem löstes pĂ„ ett sidospĂ„r â kompilatorn kommer att fortsĂ€tta omvandla array.into_iter() till (&array).into_iter() som om ingen implementering av IntoIterator fanns, men endast nĂ€r metoden anropas med syntaxen â.into_iter()â och utan att beröra anrop i formen âin [1, 2, 3]â, âiter.zip([1, 2, 3])â, âIntoIterator::into_iter([1, 2, 3])â.
- Möjlighet att ange uttryck «|» (logisk operation OR) i vilken del av mallen som helst, till exempel, istÀllet för «Some(1) | Some(2)» kan man nu skriva «Some(1 | 2)»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- AnvĂ€ndning av icke-ASCII-tecken i identifierare tillĂ„ts, inklusive alla nationella tecken som definieras i Unicode-specifikationen UAX 31, men inte emoji-tecken. Vid anvĂ€ndning av olika, men liknande tecken, ger kompileraren en varning. const BLĂ HAJ: &str = «đŠÂ»; struct äșș { ćć: String, } let α = 1; let ïœos = 2; warning: identifier pair considered confusable between âïœâ and âsâ
- En ny batch av API:er har blivit stabiliserade, inklusive:
- 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
- Duration::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- IntoIterator för arrayer
- {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 för slice::IterMut
- impl SliceIndex för (Bound, Bound)
- Vec::extend_from_within
- Tredje nivÄ av stöd har implementerats för plattformen wasm64-unknown-unknown. Tredje nivÄ innebÀr basstöd, men utan automatiserad testning, offentliggörande av officiella versioner och verifiering av möjligheten att bygga kod.
- Paketmanagern Cargo har som standard blivit översatt för att anvÀnda namnet «main» för den primÀra grenen av Git-repo (HEAD). För beroenden som finns i repositorier som anvÀnder namnet main istÀllet för master, krÀvs det inte lÀngre att ange branch = «main» i instÀllningarna.
- Krav pÄ minimal version av LLVM har höjts till LLVM 10.
Ytterligare kan nĂ€mnas att finansiering för arbetet med att utveckla integrationen i Linux-kĂ€rnan för komponenter som utvecklas i programmeringssprĂ„ket Rust kommer att tillhandahĂ„llas. Arbetet kommer att pĂ„gĂ„ inom ramen för projektet Prossimo under aegis av organisationen ISRG (Internet Security Research Group), som Ă€r grundare av projektet Letâs Encrypt och bidrar till frĂ€mjandet av HTTPS och utvecklingen av teknologier för att öka sĂ€kerheten pĂ„ internet. Finansieringen kommer att tillhandahĂ„llas av Google, som kommer att betala för Miguel Ojeda, upphovsmannen till projektet Rust-for-Linux. Tidigare har ISRG och Google redan finansierat skapandet av en alternativ HTTP-backend för verktyget curl och utvecklingen av en ny TLS-modul för http-servern Apache.
Enligt uppgifter frÄn företagen Microsoft och Google orsakas cirka 70 % av sÄrbarheterna av osÀker hantering av minnet. Det antas att anvÀndningen av programmeringssprÄket Rust för att utveckla kÀrnkomponenter, sÄsom enhetsdrivrutiner, kommer att minska risken för sÄrbarheter orsakade av osÀker minneshantering och utesluta sÄdana fel som Ätkomst till minnesomrÄden efter att de har frigjorts och buffertöverskridningar.
SÀker minneshantering sÀkerstÀlls i Rust vid kompilering genom kontroll av referenser, spÄrning av Àgande av objekt och beaktande av objektens livstid (synlighet), samt genom utvÀrdering av korrekt tillgÄng till minnet under kodens körning. Rust tillhandahÄller ocksÄ verktyg för skydd mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
KĂ€lla: opennet.ru
