LINUX.ORG.RU

Rust 1.26

 


5

11

Команда разработчиков языка 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<Item = i32> {
        // ...
    }
    
    Это позволяет не указывать полный тип в заголовке функции, если с точки зрения API конкретный тип не имеет значения. Такой синтаксис подразумевает статическую диспетчеризацию, в отличие от 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

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: tailgunner (всего исправлений: 22)
Ответ на: комментарий от Softwayer

однозначно

Это ваше личное экспертное мнение?

RazrFalcon ★★★★★
()
Ответ на: комментарий от Softwayer

Етить эстет. Что-что, а 3 точки однозначно хуже потому-что от двух точек их отличить значительно сложнее, нежели две точки и знак равенства.

Nexmean
()
Ответ на: комментарий от Nexmean

Давайте вообще точки уберём и другую синтаксическую конструкцию завезём, чтобы точно ни один даун не мог перепутать. Предлагаю .. для полузамкнутого диапазона и to для замкнутого.

Softwayer ★★
()
Ответ на: комментарий от Softwayer

Давайте вообще точки уберём и другую синтаксическую конструкцию завезём, чтобы точно ни один даун не мог перепутать

Зачем? Просто убрать конструкцию "...". Как бонус - баттхерт эстетов.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Как бонус - баттхерт эстетов.

Клевый язык для вахлаков. Можно троллить мальчиков-зайчиков дырявыми вонючими труселями и прочей '&=#@&^*

bread
()
Ответ на: комментарий от bread

Можно троллить мальчиков-зайчиков дырявыми вонючими труселями

Для этого тебе придется вернуться на двач - на ЛОР нет картинок.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Надо было изначально делать диапазоны включительно в оба конца. Теперь будет костыль в языке.

Потому что всегда проще на единицу меньше сделать диапазон, чем думать как побороть случай 0.255 для u8.

baist ★★
()
Ответ на: комментарий от baist

Надо было изначально делать диапазоны включительно в оба конца. Теперь будет костыль в языке.

Не надо было. Для тех, кто пришел с Си, Java, Python это непривычно, а о паскалистах никто не беспокоится.

tailgunner ★★★★★
()
Ответ на: комментарий от Softwayer

спутать две и три точки очень просто и лови потом опечатку. Да, выглядит как говно, но это более понятное говно.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Softwayer

Три точки хоть и выглядят красиво, но да деле легко могут запутать человека. Я уже начитался руби-кода с мешаниной из ../..., спасибо, лучше уж такое уродство с =.

thriller ★★
()
Ответ на: комментарий от thriller

Три точки хоть и выглядят красиво, но да деле легко могут запутать человека.

Да уж конечно, запутать в расте могут только точки, все остальное кристально ясно и однозначно.

anonymous
()
Ответ на: комментарий от anonymous

Да уж конечно, запутать в расте могут только точки, все остальное кристально ясно и однозначно.

В трёх лайфтаймах заблудился, что ли?

thriller ★★
()
Ответ на: комментарий от RazrFalcon

Вот где непаханное поле для ошибок после написания .. или ...

for i in 0, 4, 2 {}

И то лучше бы было, где «2» - указание шага при необходимости.

grem ★★★★★
()
Ответ на: комментарий от RazrFalcon

Конечно, конструкция с запятыми вообще из фортрана. Только вместо in там = и ключевое слово другое.

grem ★★★★★
()
Ответ на: комментарий от RazrFalcon

Ещё один перл не нужен.

Ты перл видел то? Раст уже давно его переплюнул. Выбрали они ..= лол. Такой оператор вообще нахрен не нужен, а уж дублировать его — маразм.

anonymous
()
Ответ на: комментарий от anonymous

Нужен, конечно. Чтобы по-человечески писать циклы с конечным значением переменной, равным максимальному для данного типа.

unC0Rr ★★★★★
()
Ответ на: комментарий от Softwayer

А давай ты в своём проекте сделаешь два макроса:

macro_rules! erange { ($from:expr, $to:expr) => {{ $from..$to }} }
macro_rules! irange { ($from:expr, $to:expr) => {{ $from..=$to }} }
И перестанешь плакать от таких мелочей?

anonymous
()
Ответ на: комментарий от anonymous

Может, мне и #define all(x) std::begin(x), std::end(x) сделать, а не непонятно зачем нужные рэнджи юзать?

Синтаксис языка состоит из мелочей, которые, тем не менее, в совокупности в случае раста привели к тому, что получился уродец похлеще языков семейства ML и продолжает двигаться в этом направлении.

Softwayer ★★
()
Ответ на: комментарий от anonymous

Так может быть и ..= вводить не стоило?

anonymous
()
Ответ на: комментарий от linuhs_user

Perl если это не однострочник намного читабельнее. А макросы в расте и однострочник переплюнут.

рекламировать пёрдл — это жестоко. регулярки на пёрдле это нечимаемый сборник символов.

anonymous
()
Ответ на: комментарий от anonymous

регулярки на пёрдле это нечимаемый сборник символов

Слишком толсто, попробуй еще.

anonymous
()
Ответ на: комментарий от Softwayer

…получился уродец похлеще языков семейства ML…

Шёл бы ты отсюда.

Если тебе что‐то непонятно в ML, то это твоя проблема, а не «ко‐ко‐ко, инопланетяне!»

IchBinFertig
()
Ответ на: комментарий от baist

Потому что всегда проще на единицу меньше сделать диапазон, чем думать как побороть случай 0.255 для u8.

Тогда начнутся проблемы со случаем, когда элементов для итерации нет. Если интервал от 0 до l, а l = 0, то 0..l это пусто. А если бы надо было писать 0..l-1, то для unsigned бы было переполнение, и пришлось писать if.

anonymous
()
Ответ на: комментарий от anonymous

регулярки на пёрдле

Ну регулярки у перла не родные, они были там откуда то взяты. А вот в расте они какие то совершенно другие и красивые?

linuhs_user
()
Ответ на: комментарий от Softwayer

Если тебе всё понятно, то бы не назвал уродцами языки семейства ML.

IchBinFertig
()
Ответ на: комментарий от RazrFalcon

А ты типо хотел сказать что то другое?
Я вот сейчас открыл рандомный файл в Mojolicious, и в Rocket.rs, Perl намного читабельнее, даже можно не спорить, это просто видно, лол.

linuhs_user
()
Ответ на: комментарий от linuhs_user

Зато перл бездумно исполнит все твои кракозябры и не поперхнется. А раст будет брыкаться пока кракозябры не начнут означать что-то осмысленное

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от Virtuos86

Да я уж не помню. Но последовательность событий всё равно забавная.

hobbit ★★★★★
()
Ответ на: комментарий от tailgunner

Netscape Navigator

Но там же нельзя картинки по одной подгружать. Как же тогда порно смотреть? Фигня какая то.

bread
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.