Rust se outomatiese geheuebestuur spaar die ontwikkelaar daarvan om wysers te manipuleer en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos om toegang tot 'n geheuearea te kry nadat dit vrygestel is, die herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder
Die belangrikste
-
Bygevoeg ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΡΡΠ΅Π·ΠΎΠ² (Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², slice). ΠΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π»ΠΈΡΡ ΡΠΎΡΠ½ΡΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ Ρ ΠΌΠ΅ΡΠΊΠΎΠΉ Β«..Β» Π΄Π»Ρ ΠΎΡ Π²Π°ΡΠ° ΠΎΡΡΠ°ΡΡΠΈΡ ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:fn foo(words: &[&str]) {
match words {// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π° Π½ΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
[Β«HelloΒ», Β«WorldΒ», Β«!Β», ..] => println!(Β«Hello World!Β»),// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Β«FooΒ» ΠΈ Β«BarΒ», Π° ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ
[Β«FooΒ», Β«BarΒ», ..] => println!(Β«BazΒ»),// ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ Π²ΡΡ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Β«!Β».
[.., Β«!Β»] => println!(Β«!!!Β»),// Π² ΡΡΠ΅Π· start Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Β«zΒ»
[start @ .., Β«zΒ»] => println!(Β«starts with: {:?}Β», start),// Π² ΡΡΠ΅Π· end ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Β«aΒ».
[Β«aΒ», end @ ..] => println!(Β«ends with: {:?}Β», end),rest => println!(Β«{:?}Β», rest),
}
} - ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ Β«matches!Β», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π±Π»ΠΎΠ½, Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Β«trueΒ», Π΅ΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π ΡΠ°Π±Π»ΠΎΠ½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Β«|Β» ΠΈ Β«ifΒ».
match self.partial_cmp(other) {
Some(Less) => true,
_ => vals,
}matches!(self.partial_cmp(other), Some(Less))
let foo = βfβ;
assert!(matches!(foo, βAβ..=βZβ | βaβ..=βzβ));let bar = Some(4);
assert!(matches!(bar, Some(x) if x > 2)); - Π panic-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ
, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ
ΠΏΡΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
ΡΠΈΠΏΠΎΠ² Option ΠΈ Result, ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΊΠΎΠ΄, ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΠ²ΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Π° Π½Π΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° Π² libcore. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² unwrap ΠΈ expect Π½Π°Π΄ Option::None ΠΈΠ»ΠΈ ΡΠ±ΠΎΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ unwrap_err, expect, expect_err ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠΈΠΏΠ° Result. - Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ Cargo ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Β«proc_macro crateΒ» Π² Π±Π»ΠΎΠΊ Β«externΒ» Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ. ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Β«useΒ» ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Β«extern crate proc_macro;Β». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Β«use proc_macro::TokenStream;Β», ΡΠΎ ΠΊΠΎΠ΄ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠΌ, Π΅ΡΠ»ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Β«extern crate proc_macro;Β».
- Π Π°ΡΡΠΈΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π iter::Empty<T>
bygevoeg ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Send ΠΈ Sync Π΄Π»Ρ Π»ΡΠ±ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ T.
ΠΡΠ·ΠΎΠ²Ρ Pin::{map_unchecked, map_unchecked_mut}afgelewer ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«SizedΒ».
Π io::CursorgeΓ―mplementeer PartialEq ΠΈ Eq. ΠΡΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ,ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Layout::new. - Π ΡΠ°Π·ΡΡΠ΄ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π½ΠΎΠ²Π°Ρ ΠΏΠΎΡΡΠΈΡ API, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ CondVar::wait_while, CondVar::wait_timeout_while,
DebugMap::key, DebugMap::value,
ManuallyDrop::take,
ptr::slice_from_raw_parts_mut ΠΈ ptr::slice_from_raw_parts. - ΠΠ±ΡΡΠ²Π»Π΅Π½ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ Error::description.
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ Π² Π²ΡΠΎΡΠΎΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ armv7a-none-eabi ΠΈ riscv64gc-unknown-linux-gnu. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ riscv64gc-unknown-linux-gnu.
32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ AppleΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Ρ Π΄ΠΎ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ. ΠΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Apple 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ.
Bron: opennet.ru