Rust 1.25.0

good-penguin.png

Сегодня вышел Rust 1.25.0 (2018–03–29).

Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение.
Если вы имеете предыдущую версию Rust, установленную через rustup, для получения версии 1.25.0 достаточно ввести в терминале:

$ rustup update stable

Что нового в 1.25.0 stable

Синтаксис

  • стабилизирован атрибут #[repr (align (x))]; RFC 1358

    Данный атрибут позволяет указывать выравнивание (alignment) для структур:

    struct Number(i32);
    
    assert_eq!(std::mem::align_of::(), 4);
    assert_eq!(std::mem::size_of::(), 4);
    
    #[repr(align(16))]
    struct Align16(i32);
    
    assert_eq!(std::mem::align_of::(), 16);
    assert_eq!(std::mem::size_of::(), 16);
    
    
    
  • добавлена возможность указывать вложенные группы при использовании инструкции импорта use;

    Раньше:

    use std::fs::File;
    use std::io::Read;
    use std::path::{Path, PathBuf};
    
    

    Теперь:

    // on one line
    use std::{fs::File, io::Read, path::{Path, PathBuf}};
    
    // with some more breathing room
    use std::{
        fs::File,
        io::Read,
        path::{
            Path,
            PathBuf
        }
    };
    
    
  • можно использовать `|` в начале ветки сопоставления.
    enum Foo { A, B, C }
    
    fn main() {
        let x = Foo::A;
        match x {
            | Foo::A
            | Foo::B => println!("AB"),
            | Foo::C => println!("C"),
        }
    }
    
    

Компилятор

Библиотека

Стабилизированные API

  • Location: column;
  • ptr: NonNull;

    Наиболее значимое событие — это std::ptr::NonNull. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull гарантирует, что никогда не будет равен null, а это означает, что Option> имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull зачастую будет правильным выбором для вас.

    Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);:

  • Duration: new;
  • Duration: from_secs;
  • Duration: from_millis;
  • Duration: from_micros;
  • Duration: from_nanos.

Cargo

Разное

Примечания по поводу совместимости

>>> Подробности

©  Linux.org.ru