ΠΠΊΠΈΠΏΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΅ ΡΠ°Π·Π²ΡΠ»Π½ΡΠ²Π°Π½ Π΄Π° Π²ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ Rust 1.36!
ΠΠ°ΠΊΠ²ΠΎ Π΅ Π½ΠΎΠ²ΠΎΡΠΎ Π² Rust 1.36?
Π ΡΠ΅Π³Π° ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ:
- Π Rust 1.36 Π½Π°ΠΉ-Π½Π°ΠΊΡΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ ΡΠ΅ΡΡΠ° ΠΡΠ΄Π΅ΡΠ΅.
- Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅ ΡΠ°ΠΉΠ³Π°.
ΠΡ Rust 1.36, ΡΠ°ΡΡΠΈ ΠΎΡ std, ΠΊΠΎΠΈΡΠΎ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π» (ΠΊΠ°ΡΠΎ Vec ) ΡΠ° Π² ΠΊΡΡΠΈΡΡΠ° Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π‘Π΅Π³Π° std ΡΠ΅ ΡΠ΅Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ° ΡΠ΅Π·ΠΈ ΡΠ°ΡΡΠΈ. ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π°. - ΠΠΎΠΆΠ΅ Π±ΠΈ Uninit Π²ΠΌΠ΅ΡΡΠΎ mem::uninitialized.
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ mem::uninitialized Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π·Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ², Π½ΠΎ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΅ Π΄ΠΎΡΡΠ° ΠΎΠΏΠ°ΡΠ½Π° (ΠΎΡΠ΅), ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΈΠΏΡΡ MaybeUninit Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΏΠΎ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ.
Π, ΡΡΠΉ ΠΊΠ°ΡΠΎ MaybeUninit Π΅ ΠΏΠΎ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°, mem::uninitialized ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡΡ Π²ΡΡΠ»Π΅Π½ ΠΎΡ Rust 1.38.
ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π² Π±Π»ΠΎΠ³Π° (Alexis Beingessner). - NLL Π·Π° Rust 2015.
Π ΠΎΠ±ΡΠ²Π°ΡΠ° Π ΡΠΆΠ΄Π° 1.31.0 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½ΠΈ ΡΠ°Π·ΠΊΠ°Π·Π²Π°Ρ Π·Π° NLL (Non-Lexical Lifetime), ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π°Π΅ΠΌΠΈ ΠΏΠΎ-ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ΅Π½ ΠΈ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΡΠΈΠΌΠ΅Ρ:
fn main() {
Π½Π΅ΠΊΠ° mut x = 5;
Π½Π΅ΠΊΠ° y = &x;
Π½Π΅ΠΊΠ° z = &mut x; // Π’ΠΎΠ²Π° Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈ 1.31.0.
}Π 1.31.0 NLL ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎ Π² Rust 2018, Ρ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΈ ΠΊΡΠΌ Rust 2015.
ΠΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° NLL, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π² ΡΠΎΠ²Π° Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π»ΠΎΠ³ΠΎΠ²Π΅ (Π€Π΅Π»ΠΈΠΊΡ ΠΠ»ΠΎΠΊΡ). - ΠΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ Π·Π° Cargo Π΅ --offline.
Rust 1.36 ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ° Π½ΠΎΠ² ΡΠ»Π°Π³ Π·Π° Cargo. Π€Π»Π°Π³ΡΡ --offline ΡΠΊΠ°Π·Π²Π° Π½Π° Cargo Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡΠ»Π°ΠΉΠ½ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΠΎΠ³Π°ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΎΡΠ»Π°ΠΉΠ½ ΠΈ Π°ΠΊΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, Cargo ΡΠ΅ Π²ΡΡΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°. ΠΠ° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° cargo fetch, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. - Π’ΡΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
ΠΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°:
- ΠΠ°ΠΊΡΠΎΡΡΡ dbg!() Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ.
- Π Π΅Π΄ΠΈΡΠ° API Π²Π΅ΡΠ΅ ΡΠ° ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΠΊΠ°ΡΠΎ const:
- ΠΠΎΠ²ΠΈ API, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ:
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΠΊ.
ΠΡΡΠ³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π ΡΠΆΠ΄Π°, Π’ΠΎΠ²Π°ΡΠ΅Π½ ΠΈ Clippy.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru