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)
Ответ на: комментарий от tailgunner

Но не две недели же писать в тред. Хватит извращений.

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

Снова не согласен, теперь по двум причинам:

1. У меня и у многих знакомых специально выбраны машины с механикой (лачетти, пассат, бмв 525), из-за надежности и чтобы получить большую динамику на дороге.

2. О лайфтаймах всё равно не думаешь, если что компилятор тебе скажет где ты не прав и на автомате быстро поправишь. В то время, когда я программирую на чистом Си, мне приходиться напрягать мозг чтобы не допустить вещей которые скомпилируются, но не будут работать корректно. По этому Rust даже проще в этом плане, чем Си и возможно даже чем Си++.

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

2. О лайфтаймах всё равно не думаешь, если что компилятор тебе скажет где ты не прав и на автомате быстро поправишь.

на автомате

Как же так, ведь ты выбрал «механику»?)

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

Как же так, ведь ты выбрал «механику»?)

Ну чувак писал в контексте, мол автомат - это когда ему не нужно думать о лайфтаймах. А механика, это когда нужно =)

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

Чтобы полюбить раст нужно его хоть немного знать наверно. А хейтить можно все на свете не разбираясь.

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

Таки по финансовым отчётам медленно, но растут. В год +80..+100 миллионов зелени. Но до КрасноШапки конечно им далеко по прибыли

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

Таки по финансовым отчётам медленно, но растут. В год +80..+100 миллионов зелени. Но до КрасноШапки конечно им далеко по прибыли

В мире свободного софта главную скрипку играют фанатики, а не корпорации. Если корпорация своими денежными вливаниями продвигает какой-либо проект, то такой проект обязательно загнётся. Точнее без поддержки «Сообщества» деньги корпораций никогда не окупятся, вся «зелень» уйдёт в «чёрную дыру».

Как правило корпорации включаются в работу на поздних стадиях.

Причём, чем неадекватнее и оголтелее будет группа фанатиков, тем выше шанс, что взлетит.

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

Какой бред. Фанатики давно ничего не решают, спободный софт точно так же как и закрытый разрабатывается в основном людьми за деньги корпораций, а не за идею.

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

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

Не точно так же. Закрытый софт разрабатывается _только_ за деньги, а свободный - отчасти за деньги, отчасти за идею.

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

Закрытый софт разрабатывается _только_ за деньги, а свободный - отчасти за деньги, отчасти за идею.

А если я пишу свой закрытый софт, на котором хочу поиметь гешефт, это в какую категорию попадает? Я бы заменил «за» на «ради».

Virtuos86 ★★★★★
()

Я думаю надо разрабам письмо написать чтобы они сменили бекенд на GCC. И тогда в коллекции компиляторов ГНУ появится новый фронтенд по имени gcc-rust.

Не посоны LLVM уж совсем не катит.

anonymous
()

Уже понятно, что Rust станет языком общего назначения, универсальным. Скриптовые одностраничники, конечно, на нем не попишешь - поэтому всякие Python'ы он вышибит из прикладной разработки и загонит по своим клеткам. Они от того развелись и разрослись, что небыло на них Rust'а. А всяких Java/C++/Go и прочих конкурентов, претендующих на универсальность - Rust просто убъет. Методично вырежет каждый кусок кода и заменит собой. Единственный сильный противник ему - это Swift, но тот будет только сидель в своем яблоке и помалкивать.

anonymous
()

Rust 1.26.1

https://blog.rust-lang.org/2018/05/29/Rust-1.26.1.html

Чтобы не начинать новый срач^W^Wновый тред, краткая сводка:

  • RLS no longer interferes with command line builds
  • Rustfmt stopped badly formatting text in some cases
  • Returning from main via impl Trait where the Trait is not Termination is no longer permitted
  • ::<> (turbofish) no longer works for method arguments whose type is impl Trait
  • NaN > NaN no longer returns true in const contexts
  • rustup should no longer fail due to missing documentation on some platforms

Из интересного, main теперь при использовании impl Trait для описания возвращаемого значения не может возвращать типы, которые не реалилизуют типаж Termination (с оговоркой), и оператор «турбофиш» временно не будет работать для аргументов методов, описанных с помощью impl Trait (временно — до уточнения семантики взаимодействия):

struct Foo;

impl Foo {
    fn bar(&self, _arg: impl Copy) {}
}

fn main() {
    Foo.bar::<u32>(0); // на 1.26.1 stable не соберется
}

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

типаж

«турбофиш»

Ждем перевода «turbofish» (как существительного и как глагола). И чтобы не менее дурацкогоприкольного, чем перевод «trait».

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

Ждем перевода

Держите нас в курсе!

«turbofish»

Оператор «турбированная рыбина». Там давеча один чувак спрашивал, как можно назвать оператор ::, уже не помню, на чём сошлись, но полёт фантазии завораживал.

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

Ждем перевода

Держите нас в курсе!

Держим!

Ждем перевода «turbofish» (как существительного и как глагола).

Оператор «турбированная рыбина»

А глагольная форма, наверное, «турбированно рыбить»? Или «турбированно рыбинить»? Кстати, а почему «турбированная», а не «турбинная»?

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

Ждем перевода

Держите нас в курсе!

Держим!

Ждите.

Ждем перевода «turbofish» (как существительного и как глагола).

Оператор «турбированная рыбина»

А глагольная форма, наверное, «турбированно рыбить»?

«Рыбачить» же.

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

Ждем перевода

Держите нас в курсе!

Держим!

Ждите.

Долго?

А глагольная форма, наверное, «турбированно рыбить»?

«Рыбачить» же.

Турбированно? Турбинно?

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

Только в твоих влажных фантазиях.

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

перевод «trait»

Я цитирую англо-русский словарь от 1981 года (28 edition), взятый с книжной полки:

trait [trei] штрих; характерная черта

По-моему, «типаж» где-то рядом находится, да еще и удачно созвучен «типу». Тебя больше устроил бы «штрих»?

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

Долго?

В масштабах Вселенной — нет.

Турбированно? Турбинно?

Турбированная — рыба, а рыбалка на любую рыбу это рыбалка.

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

Турбированная — рыба

а рыбалка на любую рыбу это рыбалка.

Ты переводишь термин «turbofish into» как «порыбачить на турбированную рыбину»? Переводы - это не твое.

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

Переводы - это не твое.

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

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

turbofish into

А, так ты про это. Это типичная «непереводимая игра слов». Я бы прочитал (заметь, не «перевел») это как «мономорфизировать (конкретизировать) к форме, параметризованной типом …». Но это так зубодробительно :(

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

Я бы прочитал (заметь, не «перевел») это как «мономорфизировать (конкретизировать) к форме, параметризованной типом …»

«Турборыбить» же. Но я знаю, что в русском языке нет слова «рыбить», и я не предлагаю это в качестве официального или полуофициального перевода.

И, ИМХО, «мономорфизировать» - технически неправильный перевод; турборыбка - просто указание «использовать указанный тип в данном параметризованном блоке». Мономорфизация - это следствие.

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

Но я знаю, что в русском языке нет слова «рыбить», и я не предлагаю это в качестве официального или полуофициального перевода.

Из-за твоего тумана я не вижу леса. Думаю, что строчение комментариев на ЛОР'е в любом случае находится бесконечно далеко от предложения трактовки новых терминов погромистскому сообществу — формат не тот.

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

И, ИМХО, «мономорфизировать» - технически неправильный перевод

Ты разучился читать?

Я бы прочитал (заметь, не «перевел»)

Я прочитал, а не перевел.

турборыбка - просто указание «использовать указанный тип в данном параметризованном блоке». Мономорфизация - это следствие.

Значит, я неверно прочитал, ничего страшного ). Тогда «использовать форму, параметризованную типом …».

турборыбка

Как-как, простите?!

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

и я не предлагаю

в любом случае находится бесконечно далеко от предложения

No shit, Sherlock!

Опять ты невнимателен:

в любом случае

== предлагай, не предлагай, наши кухонные посиделки не устроят революцию в русскоязычной переводной литературе по программированию

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

предлагай, не предлагай, наши кухонные посиделки не устроят революцию в русскоязычной переводной литературе по программированию

Ты не понял изначально - никакой революции не предполагалось. Как не предполагалось, например, вызвать дождь.

tailgunner ★★★★★
()

Личная переписка в новостях. Тейлганнер как джентельмен теперь обязан застрелиться выписать себе -200.

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

Тылгуннер как жентыльмен

исправил

anonymous
()
https://crates.io/
Most Downloaded
libc

bindings 
bindings 
bindings 
bindings 
bindings 
...
...
anonymous
()

Краб чем-то подобен Жабе. Только легче и везде вместо динамики - статика. Рефакторить поэтому код безопаснее, что несомненно плюс.

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

«Рыбнуться в».

Если закрыть глаза на то, что нет слова «рыбнуться», в переводе должна еще упоминаться турбина. «Турборыбнуть(ся) в».

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

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

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

4.2.

Go не создавался как замена C++/Java, а создавался как замена питона (что доказывают проекты вроде этого). Другое доказательство — полное отсутствие инструментов управления сложностью, вроде шаблонов/дженериков, нормального ООП или (спорно) исключений, что фактически требует ограничивать применимость Go к маленьким программам (типа <50k строк, которые после выкидывания всех if err != nil return nil, err превратились бы в 35k), что прямо противоположно целям C++/Java.

А еще забавно, что Гвидо уволился из гугла через полгода после выхода go 1.0.

vzzo ★★★
()
Последнее исправление: vzzo (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.