ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ
ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ
ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΡ
ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.ΠΏ. ΠΠ»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (pipelined), ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ crate-ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π΅ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ»ΠΈ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΡΠΏΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ², Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ°Π½ΡΡΠ΅. ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Ρ ΡΠ°Π·Π²Π΅ΡΠ²Π»ΡΠ½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ, ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡΡΡ Π½Π° 10-20%;
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ
std::mem::uninitialized ΠΈstd::mem::zeroed . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, std::mem::uninitialized ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ mem::uninitialized ΡΠΆΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏMaybeUninit . Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ mem::zeroed, ΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ ΡΠΈΠΏΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.ΠΠ»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² Π½ΠΎΠ²ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° lint-ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π²ΡΡΠ²Π»ΡΡΡΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ c mem::uninitialized ΠΈΠ»ΠΈ mem::zeroed. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ mem::uninitialized ΠΈΠ»ΠΈ mem::zeroed Ρ ΡΠΈΠΏΠ°ΠΌΠΈ &T ΠΈ Box‹T›, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ;
- Π Π°ΡΡΠΈΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° «#[deprecated]», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ crate-ΠΏΠ°ΠΊΠ΅ΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ Rust 1.38 Π΄Π°Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° «#[global_allocator]» Π² ΡΡΠ±ΠΌΠΎΠ΄ΡΠ»ΡΡ ;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
std::any::type_name , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠ·Π½Π°ΡΡ ΠΈΠΌΡ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠ΅Π»ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π±ΡΠ»Π° Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ:fn gen_value‹T: Default>() -› T {
println!(«Initializing an instance of {}», std::any::type_name::‹T›());
Default::default()
}fn main() {
let _: i32 = gen_value(); # Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ «i32»
let _: String = gen_value(); # Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ «alloc::string::String»
} - Π Π°ΡΡΠΈΡΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
- slice::{concat, connect, join} ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ &[T] ΠΏΠΎΠΌΠΈΠΌΠΎ &T;
- «*const T» ΠΈ «*mut T» ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ marker::Unpin;
- «Arc‹[T]›» ΠΈ «Rc‹[T]›» ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ FromIterator‹T›;
- iter::{StepBy, Peekable, Take} ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ DoubleEndedIterator.
- ascii::EscapeDefault ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Clone ΠΈ Display.
- Π ΡΠ°Π·ΡΡΠ΄ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π½ΠΎΠ²Π°Ρ ΠΏΠΎΡΡΠΈΡ API, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ
- ‹*const T›::cast, ‹*mut T›::cast,
- Duration::as_secs_f{32|64},
- Duration::div_duration_f{32|64},
- Duration::div_f{32|64},
- Duration::from_secs_f{32|64},
- Duration::mul_f{32|64},
- ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ ΠΎΡΡΠ°ΡΠΊΠΎΠΌ
div_euclid ΠΈ rem_euclid Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²;
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ cargo Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΈ «—features» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ;
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ ΡΡΠ΅ΡΠΈΠΉ
ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets, armv7-unknown-linux-gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl ΠΈ riscv32i-unknown-none-elf. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru