Команда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ прСдставляСт Π²Π°ΠΌ Rust 1.36!

Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² Rust 1.36?
Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚Ρ€Π΅ΠΉΡ‚ Future, ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ: ΠΊΡ€Π΅ΠΉΡ‚ alloc, MaybeUninit<T>, NLL для Rust 2015, новая рСализация HashMap<K, V> ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π»Π°Π³ —offline для Cargo.


А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:

  • Π’ 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, которая скачаСт всС зависимости.
  • Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΈ измСнСния Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅:

Π”Ρ€ΡƒΠ³ΠΈΠ΅ измСнСния Rust, Cargo ΠΈ Clippy.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru