ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ
ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ
ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΡ
ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.ΠΏ. ΠΠ»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅
-
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΡΡΠ΅Π·ΠΎΠ² (Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², 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,
_ => false,
}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>
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Send ΠΈ Sync Π΄Π»Ρ Π»ΡΠ±ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ T.
ΠΡΠ·ΠΎΠ²Ρ Pin::{map_unchecked, map_unchecked_mut}ΠΈΠ·Π±Π°Π²Π»Π΅Π½Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ «Sized».
Π io::CursorΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ 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-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru