LINUX.ORG.RU

Rust 1.22 (и Rust 1.22.1)

 


1

8

Почему сразу две версии? Чтобы задницы злопыхателей и критиков частых релизов полыхали ещё сильнее! (Как вариант, потому что 1.22.1 содержит патч, устраняющий баг в релизе 1.22, проявляющийся в Cargo у пользователей ОС macOS High Sierra, но это неточно.)

Что нового?

  • Основная фича: теперь вы можете использовать ? с Option<T>:
    fn try_option_some() -> Option<u8> {
        let val = Some(1)?;
        Some(val)
    }
    assert_eq!(try_option_some(), Some(1));
    
    fn try_option_none() -> Option<u8> {
        let val = None?;
        Some(val)
    }
    assert_eq!(try_option_none(), None);
    

    Пока функциональность ограничена; так, вы не можете писать код, который смешивает Result'ы и Option'ы в одной и той же функции, к примеру. Это станет возможным в прекрасном далёко.

  • Типы, реализующие Drop теперь доступны в `const` и `static` определениях:
    struct Foo {
        a: u32,
    }
    
    impl Drop for Foo {
        fn drop(&mut self) {}
    }
    
    const F: Foo = Foo { a: 0 };
    static S: Foo = Foo { a: 0 };
    

    Ничего особенного, но, согласитесь, приятно.

  • Два последних изменения в компиляторе должны ускорить компиляцию в режиме отладки.
  • T op= &T теперь работает для примитивных типов:
    let mut x = 2;
    let y = &8;
    
    // это не работало ранее, но теперь работает
    x += y;
    

    А раньше бы пришлось использовать разыменование: x += *y.

  • Улучшенные бэктрейсы на macOS.
  • Теперь вы можете создавать `compile-fail` тесты в Rustdoc:
    /// ```compile_fail
    /// let x = 5;
    /// x += 2; // shouldn't compile!
    /// ```
    
  • Наконец, мы удалили `le32-unknown-nacl` из поддерживаемых целей сборки. Google отказался от PNaCl в пользу WebAssembly. Вы уже можете компилировать Rust код в WebAssembly.

Подробно обо всём этом — в примечаниях к выпуску.

Стабилизация stdlib

Несколько новых API было стабилизировано в этом выпуске:

Cargo

★★★★★

Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от dzidzitop

Тебе выше уже привели эквивалентный код с переменными. В примере... внезапно — пример.

mersinvald ★★★★★
()
Последнее исправление: mersinvald (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.