Сегодня вышел Rust 1.25.0 (2018-03-29).Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение. Если вы имеете предыдущую версию Rust, установленную через rustup, для получения версии 1.25.0 достаточно ввести в терминале: $ rustup update stable Что нового в 1.25.0 stableСинтаксис [ стабилизирован атрибут #[repr(align(x))]; ](
https://github.com/rust-lang/rust/pull/47006 ) [ RFC 1358 ](
https://github.com/rust-lang/rfcs/pull/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); [ добавлена возможность указывать вложенные группы при использовании инструкции импорта ](
https://github.com/rust-lang/rust/pull/47948 ) 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 } }; [ можно использовать `|` в начале ветки сопоставления. ](
https://github.com/rust-lang/rust/pull/47947 ) enum Foo { A, B, C } fn main() { let x = Foo::A; match x { | Foo::A | Foo::B => println!("AB"), | Foo::C => println!("C"), } } Компилятор [ Апгрейд с LLVM 4 до LLVM 6 (еще один шажок к поддержке AVR); ](
https://github.com/rust-lang/rust/pull/47828 ) [ Добавлена опция ](
https://github.com/rust-lang/rust/pull/47521 ) -C lto=val; [ Добавлена цель сборки (target) ](
https://github.com/rust-lang/rust/pull/47282 ) i586-unknown-linux-musl. Библиотека [ реализован типаж `Send` для `process::Command` на Unix; ](
https://github.com/rust-lang/rust/pull/47760 ) [ реализованы `PartialEq` и `Eq` для `ParseCharError`; ](
https://github.com/rust-lang/rust/pull/47790 ) [ `UnsafeCell::into_inner` теперь не `unsafe`; ](
https://github.com/rust-lang/rust/pull/47204 ) [ добавлен в `libstd` код, специфичный для `CloudABI`; ](
https://github.com/rust-lang/rust/pull/47268 ) [ `Float::{from_bits, to_bits}` теперь доступны в `libcore`; ](
https://github.com/rust-lang/rust/pull/46931 ) [ реализован `AsRef` для `Component`; ](
https://github.com/rust-lang/rust/pull/46985 ) [ реализован `Write` для `Cursor`; ](
https://github.com/rust-lang/rust/pull/46830 ) [ `Duration` перемещён из `libstd` в `libcore` (для возможности использования в контексте `no_std`). ](
https://github.com/rust-lang/rust/pull/46666 ) Стабилизированные API [ Location::column ](
https://doc.rust-lang.org/std/panic/struct.Location.html#method.column ) ; [ ptr::NonNull ](
https://doc.rust-lang.org/std/ptr/struct.NonNull.html ) ;Наиболее значимое событие — это std::ptr::NonNull. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull гарантирует, что никогда не будет равен null, а это означает, что Option имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull зачастую будет правильным выбором для вас.Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);: [ Duration::new ](
https://github.com/rust-lang/rust/pull/47300 ) ; [ Duration::from_secs ](
https://github.com/rust-lang/rust/pull/47300 ) ; [ Duration::from_millis ](
https://github.com/rust-lang/rust/pull/47300 ) ; [ Duration::from_micros ](
https://github.com/rust-lang/rust/pull/47300 ) ; [ Duration::from_nanos ](
https://github.com/rust-lang/rust/pull/47300 ) . Cargo [ `cargo new` больше не удаляет префикс `rust` и суффикс `rs`; ](
https://github.com/rust-lang/cargo/pull/5013 ) [ `cargo new` теперь по умолчанию создаёт пакет приложения (binary crate), а не библиотечный пакет (library crate). ](
https://github.com/rust-lang/cargo/pull/5029 ) Разное [ `Rust by example` теперь часть официальной документации и доступен по адресу
https://doc.rust-lang.org/rust-by-example (старый адрес —
https://rustbyexample.com/). ](
https://github.com/rust-lang/rust/pull/46196 ) Примечания по поводу совместимости [ удалён net::lookup_host; ](
https://github.com/rust-lang/rust/pull/47510 ) [ `rustdoc` переключён на `pulldown` как дефолтный рендерер Markdown; ](
https://github.com/rust-lang/rust/pull/47398 ) borrow checker иногда неправильно разрешал перекрывающиеся заимствования вокруг операций индексирования (см. [ #47349 ](
https://github.com/rust-lang/rust/pull/47349 ) ). Это было исправлено (что также позволило использовать некоторый корректный код, который вызывал ошибки (например, [ #33903 ](
https://github.com/rust-lang/rust/pull/33903 ) и [ #46095 ](
https://github.com/rust-lang/rust/pull/46095 ) ); [ удалён устаревший нестабильный атрибут `#[simd]`. ](
https://github.com/rust-lang/rust/pull/47251 )
Ссылка:
https://www.linux.org.ru/news/mozilla/14114792