Rust 1.26
Команда языка 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 в заголовке функции в качестве типа возвращаемого значения:
fn foo() -> impl Iterator { // ... } Это позволяет не указывать полный тип в заголовке функции, если с точки зрения API конкретный тип не имеет значения. Такой синтаксис подразумевает статическую диспетчеризацию, в отличие от Box.
Также эта возможность удобна для использования с замыканиями (closures):
fn foo() -> impl Fn(i32) -> i32 { |x| x + 1 }
Новый синтаксис теперь можно использовать и для типов аргументов фунции:
// раньше нужно было писать так: fn foo(x: T) { // сейчас можно так: fn foo(x: impl Trait) {
Неявное разыменование ссылок в шаблонах подстановки (match, if let, …)
Теперь следующий код больше не вызывает ошибку компиляции:
fn hello(arg: &Option) { match arg { Some(name) => println!("Hello {}!", name), None => println!("I don"t know who you are."), } } и эквивалентен такому:
fn hello(arg: &Option) { 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 { let f = File::open("bar.txt")?; Ok(()) }
Ускорения в работе компилятора
Стабилизирована функция std: fs: read_to_string
При форматировании через trait Debug теперь можно выводить целочисленные значения в шестнадцатеричном виде:
assert!(format!("{:02x?}", b"Foo0") == "[46, 6f, 6f, 00]")
Номер версии Cargo, начиная с этого релиза, изменяется синхронно с номером версии Rust
>>> Подробности
Обновить Rust можно с помощью команды:
curl https://sh.rustup.rs -sSf | sh # если у вас еще не установлен rustup rustup update stable
Основные изменения:
Вторая редакция книги «The Rust Programming Language» (почти) готова, и теперь рекомендована по умолчанию для ознакомления вместо первой версии. Также готовится к выходу бумажное издание книги.
impl Trait в заголовках функций
Стало возможно указывать Trait в заголовке функции в качестве типа возвращаемого значения:
fn foo() -> impl Iterator { // ... } Это позволяет не указывать полный тип в заголовке функции, если с точки зрения API конкретный тип не имеет значения. Такой синтаксис подразумевает статическую диспетчеризацию, в отличие от Box.
Также эта возможность удобна для использования с замыканиями (closures):
fn foo() -> impl Fn(i32) -> i32 { |x| x + 1 }
Новый синтаксис теперь можно использовать и для типов аргументов фунции:
// раньше нужно было писать так: fn foo(x: T) { // сейчас можно так: fn foo(x: impl Trait) {
Неявное разыменование ссылок в шаблонах подстановки (match, if let, …)
Теперь следующий код больше не вызывает ошибку компиляции:
fn hello(arg: &Option) { match arg { Some(name) => println!("Hello {}!", name), None => println!("I don"t know who you are."), } } и эквивалентен такому:
fn hello(arg: &Option) { 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 { let f = File::open("bar.txt")?; Ok(()) }
Ускорения в работе компилятора
Стабилизирована функция std: fs: read_to_string
При форматировании через trait Debug теперь можно выводить целочисленные значения в шестнадцатеричном виде:
assert!(format!("{:02x?}", b"Foo0") == "[46, 6f, 6f, 00]")
Номер версии Cargo, начиная с этого релиза, изменяется синхронно с номером версии Rust
>>> Подробности
Ещё новости по теме:
18:20