ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡ 1.96 Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Rust, ΠΊΠΎΠΉΡΠΎ Π±Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½ ΠΎΡ Mozilla, Π° ΡΠ΅Π³Π° ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΏΠΎΠ΄ Π±Π»Π°Π³ΠΎΡΠΊΠ»ΠΎΠ½Π½ΠΎΡΡΡΠ° Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°ΡΠ° Π½Π΅ΡΡΠΎΠΏΠ°Π½ΡΠΊΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Rust Foundation. Π―Π·ΠΈΠΊΡΡ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈ, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ±ΠΎΡΡΠΈΠΊ Π½Π° ΠΌΡΡΠΎΡ ΠΈΠ»ΠΈ runtime (runtime Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°).
ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² Rust ΠΈΠΌΠ°Ρ Π·Π° ΡΠ΅Π» Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠ°Ρ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ Π΄Π° Π·Π°ΡΠΈΡΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ°ΡΠΈ ΠΎΡ Π½ΠΈΡΠΊΠΎΡΡΠ΅ΠΏΠ΅Π½Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ°Π·ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π²ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΈΠ·Π²ΡΠ½ ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π½Π° Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.Π½. ΠΠ° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ±ΠΎΡΠΊΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅, ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Cargo. ΠΠ° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ crates.io.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² Rust ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅, ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΆΠΈΠ²ΠΎΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ (ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ) ΠΈ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°. Rust ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΏΡΠ΅ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°, ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΈΠΌ, ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ (immutable) Π½Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΈΠ»Π½Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ, Π·Π° Π΄Π° ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ:
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠΎΠ΄ΡΠ» range Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΈ Π·Π° Π·Π°ΠΌΡΠ½Π° Π½Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ Range, RangeInclusive, RangeToInclusive ΠΈ RangeFrom, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π² Copy ΡΡΡΡΠΊΡΡΡΠΈ. Π’ΠΈΠΏΡΡ Range ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ (Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ° ΡΠ΅Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ), ΡΠΈΠΏΡΡ RangeFrom ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΈΡΠ»Π°, Π·Π°ΠΏΠΎΡΠ²Π°ΡΠΈ ΠΎΡ ΡΠΊΠ°Π·Π°Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π° ΡΠΈΠΏΡΡ RangeInclusive ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ Π²ΠΊΠ»ΡΡΠ²Π° ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΌΡ Π³ΡΠ°Π½ΠΈΡΠΈ. Π Π±ΡΠ΄Π΅ΡΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΡΠΈΠΏΠΎΠ²Π΅ RangeFull ΠΈ RangeTo, Π° ΡΡΠ°ΡΠ°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½Π° Π² core::range::legacy::*, ΠΊΠ°ΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ βN..Mβ ΡΠ΅ Π±ΡΠ΄Π΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½ ΠΊΡΠΌ Π½ΠΎΠ²ΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π°Ρ Ρ ΡΠΎΠ²Π°, ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΏΠ°ΠΆΠ° Iterator ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠΈΠΏΠ°ΠΆΠ° IntoIterator, Ρ.Π΅. ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΡΠΈΠΏΡΡ Π² ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Ρ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ (ΡΠΈΠΏΠ°ΠΆΡΡ Copy, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΈΠΏΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Ρ Ρ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅), ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π±Π΅ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π²Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π·Π° Π² ΡΡΡΡΠΊΡΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½Π°ΡΠ°Π»Π½ΠΈΡΠ΅ ΠΈ ΠΊΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ:use core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range);impl Span {
pub fn of(self, s: &str) -> &str {
&s[self.0]
}
} - ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΠΌΠ°ΠΊΡΠΎΡΠΈ Β«assert_matches!Β» ΠΈ Β«debug_assert_matches!Β», ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π΄Π°Π»ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΡΠΊΠ°Π·Π°Π½ ΡΠ°Π±Π»ΠΎΠ½ ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅. Π’Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΎΡ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅ Β«assert!(matches!(..))Β» ΠΈ Β«debug_assert!(matches!(..))Β» Ρ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π»ΠΈ ΡΠ±ΠΎΡ. ΠΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ Ρ Π²ΡΠ½ΡΠ½ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ, Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΡΠ²Π΅Π½ ΠΈΠΌΠΏΠΎΡΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Β«core::assert_matchesΒ».
use core::assert_matches;
fn get_random_number() -> u32 {
4
}fn main() {
assert_matches!(get_random_number(), 1..=6);
} - ΠΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π»Π΅Π²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° WebAssembly, ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ° Β«βallow-undefinedΒ», ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Ρ Π° Π² ΠΈΠΌΠΏΠΎΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π° Β«envΒ», Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ. ΠΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π·Π° WebAssembly Π²ΡΠΈΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°ΡΠ°, ΡΠ΅Π³Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ. ΠΠ° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Β«RUSTFLAGS=-Clink-arg=βallow-undefinedΒ» ΠΈΠ»ΠΈ ΠΈΠ·ΡΠ°Π·ΡΡ β#[link(wasm_import_module = Β«envΒ»)]β Π² ΠΊΠΎΠ΄Π°.
- Π ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½ΠΈ Π΅ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π½ΠΎΠ²Π° ΠΏΠΎΡΡΠΈΡ API, ΠΊΠ°ΡΠΎ ΡΠ° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π° ΡΠΈΠΏΠ°ΠΆΠΈΡΠ΅:
- assert_matches!
- debug_assert_matches!
- From Π·Π° AssertUnwindSafe
- From Π·Π° LazyCell
- From Π·Π° LazyLock
- core::range::RangeToInclusive
- core::range::RangeToInclusiveIter
- core::range::RangeFrom
- core::range::RangeFromIter
- core::range::Range
- core::range::RangeIter
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Cargo Π΅ ΠΎΡΡΡΡΠ°Π½Π΅Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ CVE-2026-5223, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° Π΄ΡΡΠ³ crate ΠΏΠ°ΠΊΠ΅Ρ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠ΅Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΡΡΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΠΈ ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ Π² ΡΠ°ΠΌΠΈΡ crate. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° ΡΠ΅ ΠΏΡΠΎΡΠ²ΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ Π½Π΅ Π·Π°ΡΡΠ³Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ crates.io, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² crates.io Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΎ ΠΊΠ°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ.
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ (PDF) Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Rust Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΡΠΌΡΠ΅Ρ Π·Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ.
ΠΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅ΡΠΎ Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° STMicroelectronics Ρ ΡΡΠ°ΡΡΠΈΠ΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΅Π²ΡΠΎΠΏΠ΅ΠΉΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°. ΠΠ° Π΄Π²Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ Π΅ΠΊΠΈΠΏΠΈ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π΅ Π±ΠΈΠ»Π° ΠΏΠΎΡΡΠ°Π²Π΅Π½Π° Π·Π°Π΄Π°ΡΠ° Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΡΡΠΌΡΠ΅Ρ Π·Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ STM32U585AI Ρ ΡΠ΄ΡΠΎ Arm Cortex-M33. ΠΡΡΠ²ΠΈΡΡ Π΅ΠΊΠΈΠΏ Π΅ ΡΡΠ·Π΄Π°Π²Π°Π» ΡΡΡΠΌΡΠ΅Ρ Π½Π° C, Π° Π²ΡΠΎΡΠΈΡΡ Π½Π° Rust.
Π’Π΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π·Π°Π²ΡΡΡΠ΅Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° C Π²ΠΌΠ΅ΡΡΠΎ Rust ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΡΠΌΡΠ΅ΡΠΈ Π·Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. ΠΠΎ-ΡΠΊΠΎΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ runtime, Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Rust ΠΎΡ ΠΎΡΠΊΡΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Ariel OS, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Rust ΠΏΠΎΠ΄ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° C, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π΅Π½ ΡΡΠ΅ΠΊ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΡΠΌΡΠ΅ΡΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° newlib.
Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠΈΠ½Π°Π»Π½ΠΈΡ ΡΡΡΠΌΡΠ΅Ρ Π±Π΅ 84100 Π±Π°ΠΉΡΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Rust ΠΈ 76744 Π±Π°ΠΉΡΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° C (Ρ 10% ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ), Π½ΠΎ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΡΠΈ ΡΡΡΠΌΡΠ΅ΡΠ° Π½Π° Rust ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π½ΠΈΡΠΊΠ° β 24640 Π±Π°ΠΉΡΠ° ΡΡΠ΅ΡΡ 42608 Π±Π°ΠΉΡΠ°. Π©ΠΎ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, ΠΏΡΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΠ°Π»Π½ΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π·Π° 6 ΡΠ΅Π΄ΠΌΠΈΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Rust Π΄Π²Π° ΠΏΡΡΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π°ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° C, Π½ΠΎ ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Ρ Π° ΠΎΡ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½Π°ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. Π‘Π»Π΅Π΄ 4 ΡΠ΅Π΄ΠΌΠΈΡΠΈ, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π΄Π²Π΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΠΈΠ³Π½Π°Ρ Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, Π±Π»ΠΈΠ·ΠΊΠΈ Π΄ΠΎ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ.

ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
