ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Ρ ΡΠ°Π΄ΠΎΡΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ Rust 1.36!
Π§ΡΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² Rust 1.36?
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
- Π Rust 1.36 Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠ΅ΠΉΡ Future.
- ΠΡΠ΅ΠΉΡ alloc.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Rust 1.36, ΡΠ°ΡΡΠΈ std, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π»Π»ΠΎΠΊΠ°ΡΠΎΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Vec<T>), Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΊΡΠ΅ΠΉΡΠ΅ alloc. Π’Π΅ΠΏΠ΅ΡΡ std ΡΠ΅ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΡΠΈ ΡΠ°ΡΡΠΈ. ΠΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ. - MaybeUninit<T> Π²ΠΌΠ΅ΡΡΠΎ mem::uninitialized.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ΅Π»ΠΈΠ·Π°Ρ mem::uninitialized ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° Π²Π°ΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ ΡΡΠΎ Π΄Π»Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½ΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ-ΡΠ°ΠΊΠΈ ΠΎΠΏΠ°ΡΠ½Π° (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅), ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ» ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΡΠΈΠΏ MaybeUninit<T>, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅.
ΠΡ ΠΈ ΡΠ°ΠΊ ΠΊΠ°ΠΊ MaybeUninit<T> ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ, ΡΠΎ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Rust 1.38, mem::uninitialized Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ.
ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΏΡΠΎ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ Π² Π±Π»ΠΎΠ³Π΅ (Alexis Beingessner). - NLL Π΄Π»Ρ Rust 2015.
Π Π°Π½ΠΎΠ½ΡΠ΅ Rust 1.31.0 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π½Π°ΠΌ ΠΎ NLL (Non-Lexical Lifetime), ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅Π»Π°Π΅Ρ borrow checker ΡΠΌΠ½Π΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½Π΅Π΅ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΈΠΌΠ΅Ρ:
fn main() {
let mut x = 5;
let y = &x;
let z = &mut x; // This was not allowed before 1.31.0.
}Π 1.31.0 NLL ΡΠ°Π±ΠΎΡΠ°Π» ΡΠΎΠ»ΡΠΊΠΎ Π² Rust 2018, Ρ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΈ Π² Rust 2015.
ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΏΡΠΎ NLL, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π² ΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π»ΠΎΠ³Π΅ (Felix Klocks). - ΠΠΎΠ²ΡΠΉ ΡΠ»Π°Π³ Π΄Π»Ρ Cargo — —ofline.
Π Rust 1.36 ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π°Π³ Π΄Π»Ρ Cargo. Π€Π»Π°Π³ —offline Π³ΠΎΠ²ΠΎΡΠΈΡ Cargo ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΎΡΡΠ»Π°ΠΉΠ½, ΠΈ Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ΅Π½, ΡΠΎ Cargo Π²Π΅ΡΠ½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cargo fetch, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. - ΠΠ΄Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±Π·ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅:
- Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ°ΠΊΡΠΎΡ dbg!() ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
- ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ API ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ const:
- ΠΠΎΠ²ΡΠ΅ API, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ:
- ΠΡΡΠ³ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΡΡΠ³ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Rust, Cargo ΠΈ Clippy.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru