Команда разработчиков языка Rust рада представить новую версию Rust 1.26.0. Rust — системный язык программирования, ориентированный на безопасность, скорость и параллельность.
Обновить Rust можно с помощью команды:
curl https://sh.rustup.rs -sSf | sh # если у вас еще не установлен rustup
rustup update stable
Основные изменения:
- Вторая редакция книги «The Rust Programming Language» (почти) готова, и теперь рекомендована по умолчанию для ознакомления вместо первой версии. Также готовится к выходу бумажное издание книги.
impl Trait
в заголовках функцийСтало возможно указывать Trait в заголовке функции в качестве типа возвращаемого значения:
Это позволяет не указывать полный тип в заголовке функции, если с точки зрения API конкретный тип не имеет значения. Такой синтаксис подразумевает статическую диспетчеризацию, в отличие отfn foo() -> impl Iterator<Item = i32> { // ... }
Box<Trait>
.Также эта возможность удобна для использования с замыканиями (closures):
fn foo() -> impl Fn(i32) -> i32 { |x| x + 1 }
Новый синтаксис теперь можно использовать и для типов аргументов фунции:
// раньше нужно было писать так: fn foo<T: Trait>(x: T) { // сейчас можно так: fn foo(x: impl Trait) {
- Неявное разыменование ссылок в сопоставлении с образцом (
match
,if let
, ...)Теперь следующий код больше не вызывает ошибку компиляции:
и эквивалентен такому:fn hello(arg: &Option<String>) { match arg { Some(name) => println!("Hello {}!", name), None => println!("I don't know who you are."), } }
То же работает и дляfn hello(arg: &Option<String>) { match arg { &Some(ref name) => println!("Hello {}!", name), &None => println!("I don't know who you are."), } }
&mut
+ref mut
. - Раскрытие срезов (slice) в сопоставлении с образцом
fn foo(s: &[u8]) { match s { [a, b] => (), [1, _, _] => (), _ => (), } }
- Закрытые интервалы вида
0..=4
, включающие обе границы в диапазон перечисленияfor i in 0..=4 { println!("i: {}", i); // выведет 0, 1, 2, 3 и 4 }
- Новые целочисленные типы
i128
иu128
- Функция
main()
теперь может возвращать типResult
use std::fs::File; fn main() -> Result<(), std::io::Error> { let f = File::open("bar.txt")?; Ok(()) }
- Ускорения в работе компилятора
- Стабилизирована функция std::fs::read_to_string
- При форматировании через
trait Debug
теперь можно выводить целочисленные значения в шестнадцатеричном виде:assert!(format!("{:02x?}", b"Foo\0") == "[46, 6f, 6f, 00]")
- Номер версии Cargo, начиная с этого релиза, изменяется синхронно с номером версии Rust
>>> Подробности