ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ
ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ
ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΡ
ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.ΠΏ. ΠΠ»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ rustc
ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° (PGO, Profile-Guided Optimization),
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΠ»Π°Π³ «-C profile-generate», Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ — «-C profile-use» (Π²Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π°Π³ΠΎΠΌ, ΠΎΠ±ΠΊΠ°ΡΡΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ»Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎ Π²ΡΠΎΡΡΠΌ ΡΠ»Π°Π³ΠΎΠΌ); - ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «cargo run», ΠΊΠΎΡΠΎΡΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°, Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ default-run Π² ΡΠ΅ΠΊΡΠΈΠΈ [package] Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΠ΅Π· ΡΠ»Π°Π³ «—bin» ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ «cargo run»;
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Cargo ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° «cargo vendor», ΡΠ°Π½Π΅Π΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ Π² Π²ΠΈΠ΄Π΅
ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° . ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ — ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ «cargo vendor» Π²ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Ρ crates.io Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ crates.io (ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ°Ρ ). Π£ΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° rustc Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ Π²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΠΎΠ΄ΠΈΠ½ Π°ΡΡ ΠΈΠ² Ρ ΡΠ΅Π»ΠΈΠ·ΠΎΠΌ; - ΠΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ (enum), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ ΡΠΈΠΏΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ «fn increment_or_zero(x: ByteOption) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ «ByteOption::None => 0»), ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² (‹MyType‹..››::Π²Π°ΡΠΈΠ°Π½Ρ => N) ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ Self (Π² Π±Π»ΠΎΠΊΠ°Ρ c &self ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ «Self::Quarter => 25»);
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ . ΠΠΌΠ΅ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² «const» ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» «_» Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ° Π½Π΅ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π³ΠΎΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΠΈΠΌΡΠ½ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ°ΠΊΡΠΎΡΠ°;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° «#[repr(align(N))» Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ (enums), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ AlignN‹T› Ρ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ AlignN‹MyEnum›;
- Π ΡΠ°Π·ΡΡΠ΄ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π½ΠΎΠ²Π°Ρ ΠΏΠΎΡΡΠΈΡ API, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ BufReader::buffer, BufWriter::buffer,
Cell::from_mut,
Cell::as_slice_of_cells,
DoubleEndedIterator::nth_back,
Option::xor,
{i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits ΠΈ
slice::copy_within.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru