ΠΠ±ΡΠ°Π²ΡΠ΅Π½ΠΎ ΡΠ΅ ΠΈΠ·Π΄Π°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠ³ ΡΠ΅Π·ΠΈΠΊΠ° Π ΡΡΡ 1.51, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°ΠΎ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΠΠΎΠ·ΠΈΠ»Π»Π°, Π°Π»ΠΈ ΡΠ΅ ΡΠ°Π΄Π° ΡΠ°Π·Π²ΠΈΡΠ΅Π½ ΠΏΠΎΠ΄ ΠΎΠΊΡΠΈΡΠ΅ΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠ½Π΅ Π½Π΅ΠΏΡΠΎΡΠΈΡΠ½Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ΅ Π ΡΡΡ Π€ΠΎΡΠ½Π΄Π°ΡΠΈΠΎΠ½. ΠΠ΅Π·ΠΈΠΊ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ° Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅, ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΎΠΌ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΠΏΠΎΡΡΠΈΠ·Π°ΡΠ΅ Π²ΠΈΡΠΎΠΊΠΎΠ³ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π·Π°Π΄Π°ΡΠ°ΠΊΠ° Π±Π΅Π· ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΡΠ°ΠΊΡΠΏΡΠ°ΡΠ° ΡΠΌΠ΅ΡΠ° ΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° (Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·Π²ΠΎΡΠ΅ΡΠ° ΡΠ΅ ΡΠ²ΠΎΠ΄ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Ρ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΈ ΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅).
Π ΡΡΡ-ΠΎΠ²ΠΎ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΎΠΌ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠΈΠΌΠ° ΠΈ ΡΡΠΈΡΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΡΠΈ ΠΏΡΠΎΠΈΠ·ΠΈΠ»Π°Π·Π΅ ΠΈΠ· ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡΠ΅ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΎΠΌ Π½ΠΈΡΠΊΠΎΠ³ Π½ΠΈΠ²ΠΎΠ°, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠΈΡΡΡΠΏ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΠΎΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Ρ Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ΅ ΠΎΠ½ ΠΎΡΠ»ΠΎΠ±ΠΎΡΠ΅Π½, Π½ΡΠ»ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°ΡΠ°, ΠΏΡΠ΅ΠΊΠΎΡΠ°ΡΠ΅ΡΠ΅ Π±Π°ΡΠ΅ΡΠ° ΠΈΡΠ΄. ΠΠ° Π±ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΎ ΡΠΊΠ»Π°ΠΏΠ°ΡΠ΅ ΠΈ ΡΠΏΡΠ°Π²ΡΠ°ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΠΌΠ°, ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ°Π·Π²ΠΈΡΠ° Π¦Π°ΡΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠ΅Π½Π°ΡΠ΅Ρ. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡΠΌ ΡΡΠ°ΡΠ΅Ρ.ΠΈΠΎ ΡΠ΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π½ Π·Π° Ρ ΠΎΡΡΠΎΠ²Π°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
ΠΠ»Π°Π²Π½Π΅ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΡΠ΅:
- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ
Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² (Β«const genericsΒ»), ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΡΡΠ°ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° (MVP), Π΄Π°ΡΡΠ΅Π³ΠΎ Π·Π΅Π»ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Π½Π° ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ°ΡΡ ΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Ρ.Π΅. ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π½Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ. Π£ΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΈ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΈΠΏΠ°ΠΆΠ΅ΠΉ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π²ΡΡ
ΠΎΠ΄Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠΏΡΡΠΊΠ°, Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Ρ ΡΠΈΠΏΠΎΠΌ Β«[T; N]Β» (ΡΠΈΠΏ T ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ N) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ, Π±ΡΠ»Π΅Π²ΡΠΌΠΈ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ (ΡΠΈΠΏΡ struct ΠΈ enum ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ). ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠΈΠΏΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ: struct Array<T, const LENGTH: usize> { // ^^^^^^^^^^^^^^^^^^^ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ° list: [T; LENGTH] // ^^^^^^ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ }
ΠΡΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ c ΡΡΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Β«Array<u8, 32>Β» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΌΠΎΠ½ΠΎΠΌΠΎΡΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ Array: struct Array<u8, 32> { list: [u8; 32] }
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°Ρ API std::array::IntoIter, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: fn main() { let array = [1, 2, 3, 4, 5]; // Π Π°Π½ΡΡΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ .iter() for item in array.iter().copied() { println!(Β«{}Β», item); } // Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ for item in std::array::IntoIter::new(array) { println!(Β«{}Β», item); } }
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ cargo ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ resolver Π² Cargo.toml, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π²ΡΠΎΡΡΡ Π²Π΅ΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ (feature resolver). ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ
Π² ΡΠ΅ΠΊΡΠΈΠΈ Β«[features]Β», ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΡΠΎ Π½Π΅ΡΠΌΠ΅ΡΡΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΠ΅ΠΉ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π² ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ
ΡΠΊΡΠΈΠΏΡΠ°Ρ
ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
, Π½ΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π² Π³ΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ»ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ foo, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ A ΠΈ B, ΠΈ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ bar ΠΈ baz, ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ bar Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ foo Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ A, Π° baz ΠΎΡ foo Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ B, ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ cargo ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ foo Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ A ΠΈ B. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΊΠ»ΡΡΡΠ½Π½Π°Ρ ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΉ Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΎΠ³ΠΎΠ²Π°Ρ ΡΠ±ΠΎΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡ foo Ρ Β«#![no_std]Β» Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΠΎΠΌ Ρ Β«#![no_std]Β», ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ foo Ρ Β«stdΒ» Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π² build.rs. ΠΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ resolver=Β»2β³ Π² Cargo.toml ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ, ΡΠ°Π·Π΄Π΅Π»ΡΡ dev-, host- ΠΈ target-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
- Π cargo ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΠΏΡΠΈΡ split-debuginfo, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠ°Ρ Π² ΡΠ΅ΠΊΡΠΈΠΈ Β«[profile]Β» ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π°Π³ Β«-Csplit-debuginfo=unpackedΒ» Π² rustc, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΈΠ»ΠΈΡΡ dsymutil ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π² macOS.
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠ°ΠΊΠΎΡΡ Β«ptr::addr_of!Β» ΠΈ Β«ptr::addr_of_mut!Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ raw-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π΄Π»Ρ Π½Π΅Π²ΡΡΠΎΠ²Π½Π΅Π½Π½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ. use std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // &packed.f2 ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅Π²ΡΡΠΎΠ²Π½Π΅Π½Π½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΠΊ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ let raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
- ΠΠΎΠ²ΠΈ Π΄Π΅ΠΎ ΠΠΠ-ΡΠ° ΡΠ΅ ΠΏΡΠ΅Π±Π°ΡΠ΅Π½ Ρ ΡΡΠ°Π±ΠΈΠ»Π½Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡ, ΡΠΊΡΡΡΡΡΡΡΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π΅:
- Arc::decrement_strong_count
- Arc::increment_strong_count
- Once::call_once_force
- Peekable::next_if_eq
- Peekable::next_if
- Seek::stream_position
- array::IntoIter
- panic::panic_any
- ptr::addr_of!
- ptr::addr_of_mut!
- slice::fill_with
- slice::split_inclusive_mut
- slice::split_inclusive
- slice::strip_prefix
- slice::strip_suffix
- str::split_inclusive
- sync::OnceState
- task::Wake
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 ΠΈ aarch64_be-unknown-linux-gnu_ilp32. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°.
ΠΠ·Π²ΠΎΡ: ΠΎΠΏΠ΅Π½Π½Π΅Ρ.ΡΡ