Команда разработчиков языка 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()теперь может возвращать типResultuse 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
>>> Подробности





