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)

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

Ты просто не понимаешь трудности внедрения малоизвестного языка без стандартов и спецификаций.

Внедрения куда? Писать альтернативный компилятор не имея талмуда со спецификацией да, сложно. Но сейчас, благодаря llvm, нет острой необходимости переписывания компилятора под каждую платформу. Если же под внедрением понимать использование - тут как бы не спецификации нужны, а учебники «изучение Раст за 21 день».

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

Я этого и не утверждал. А вот эрзац сделать вполне можно.

Зачем портить плюсы таким эрзацем? Это больше похоже на удовлетворение личных амбиций - вот, дескать, смотрите, на плюсах написал эрзац Раста. К чему?

Моя мысль проста - для каждой задачи есть оптимальный инструмент. Где-то лучше будет Раст, где-то плюсы. Зачем мешать их в кучу?

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

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

Если не хочется возиться с временами жизни, то меняем константные ссылки на Rc<T>, мутабельные ссылки на Rc<RefCell<T>>( или Arc<T> и Arc<Mutex<T>> или Arc<RwLock<T>>).

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

Я этого и не утверждал. А вот эрзац сделать вполне можно.

Зачем портить плюсы таким эрзацем?

Я не могу ответить на этот вопрос, потому что я не считаю, что испортил плюсы.

Где-то лучше будет Раст, где-то плюсы. Зачем мешать их в кучу?

Задай комитету по стандартизации Си++ вопрос, зачем им variant и outcome.

И зачем они обсуждают lifetime-ы, тоже спроси.

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

Perl, Python, Go, Swift не стандартизированы, но живут неплохо

С единственной реализацией дефакто. А потом pypy никто не использует, потому что неизвестно насколько он совместим и где грабли вылезут.

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

та же безопасность (в смысле safety) что и в Расте достигается сборщиком мусора

Неверно. Какой императивный язык со сборщиком мусора сегодня умеет защитить от гонок данных? Go, например, точно не может.

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

Какой императивный язык со сборщиком мусора сегодня умеет защитить от гонок данных?

Java с synchronized-методами?

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

Где-то лучше будет Раст, где-то плюсы. Зачем мешать их в кучу?

Затем, что они ориентированы на одну и ту же нишу?

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

Если не хочется возиться с временами жизни, то меняем константные ссылки на Rc<T>, мутабельные ссылки на Rc<RefCell<T>>( или Arc<T> и Arc<Mutex<T>> или Arc<RwLock<T>>).

Где-то может это и применимо, но питонистов ваш аргумент не убедит. Один и тот же медик, социолог или статистик намного большего добъется на питоне, чем на расте. Да и программист на питоне будет более продуктивен чем на расте. Раст незаменим там, где нужна безопасность, которую другими способами не обеспечишь, т.е. это нишевый продукт, остальное - хайп.

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

Задай комитету по стандартизации Си++ вопрос, зачем им variant и outcome.

И зачем они обсуждают lifetime-ы, тоже спроси.

Ну это же ясно даже школьнику - они развивают плюсы. Но вовсе не пытаются сделать из плюсов - Раст. И слава богу!

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

Ответственность на программисте, джава ничего не гарантирует.

Точно так же и C++ с мьютексами там где нужно защищает от гонок

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

Затем, что они ориентированы на одну и ту же нишу?

Подозреваю, что вы не в курсе начала нашего диалога, но тем не менее отвечу - а что мешает эти два языка использовать совместно? Не пытаясь один язык превратить в эрзац другого? Зачем делать из плюсов эрзац Раста, если можно использовать их оба, опираясь на сильные стороны каждого? Неужели Раст настолько божественнен, что возможность для других языков стать хотя бы его эрзацем просто восхитительна по своей сути?

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

Задай комитету по стандартизации Си++ вопрос, зачем им variant и outcome.
И зачем они обсуждают lifetime-ы, тоже спроси.

они развивают плюсы

...в направлении Rust.

а что мешает эти два языка использовать совместно?

Отсутствие компилятора Rust на целевой платформк подойдет в качестве причины?

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

Один и тот же медик, социолог или статистик намного большего добъется на питоне, чем на расте.

В нише одноразовых программ конечно пытон божит.

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

бигдата и мл — это для тебя «никто»

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

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

Зачем делать из плюсов эрзац Раста, если можно использовать их оба

Серьезно, к плюсам еще и раст добавить? Мощная у тебя наверно команда, анон. Или ты как обычно про лабы?

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

...в направлении Rust.

Все языки заимствуют друг у друга. Я бы не стал утверждать, что плюсы развиваются в сторону раста. Плюсы много берут от других языков. Ей богу, но это уже фанбойство.

Отсутствие компилятора Rust на целевой платформк подойдет в качестве причины?

Подойдет в качестве причины не использовать Раст на целевой платформе, не больше. Ну что вы как влюбленный, который ничего не видит, кроме предмета своего обожания. Нет Раста на целевой платформе - либо портируйте Раст туда, либо используйте доступный инструмент. Пытаться сделать из плюсов эрзац раста просто лишь бы собирать на целевой платформе что-то похожее на раст - ну это же жесть. Вы никогда не сможете сделать из плюсов Раст, а ваш эрзац будет такой хренью, которой никто кроме вас пользоваться не будет. Хотя бы потому что язык это совокупность множества вещей и то, что в Расте чудесно, в плюсах будет кривым и наоборот.

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

можно использовать их оба

В какой параллельной вселенной выгодно поддерживать кодовые базы и либы на двух разных языках, которые могут общаться только через C FFI?

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

Ответственность на программисте, джава ничего не гарантирует.

Вы хотите сказать, что Java позволяет вам одновременно войти в один и тот же synchronized-метод из двух или более рабочих потоков?

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

Ничего подобного, но Java не предупредит о том, что ты забыл добавить synchronized там где может быть гонка данных.

А раст ударит по пальцам в случае использования !Sync типа из 2 и более потоков.

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

Подойдет в качестве причины не использовать Раст на целевой платформе, не больше

Мне этого более чем хватает.

Ну что вы как влюбленный, который ничего не видит, кроме предмета своего обожания

Мне кажется, программирование - это не твое. Ты не пробовал прилагать свои таланты в области психологии?

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

В нише одноразовых программ конечно пытон божит.

Один дата аналитик сказал, что обычно прототип написанный на питоне потом в продакшн и идет. Потому что никто не хочет переписывать (а уровень программирования у датасайентистов известен), при этом бизнес (который и содержит этих датасайнтистов и программистов) удовлетворен и этим результатом. Так вот язык без лайфтаймов (о, какой ужас) и даже со сборщиком мусора (будь они все прокляты) нагибает БОЖЕСТВЕННЫЙ РАСТ. Хе-хе. Сорри за сарказм, не удержался))

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

Так вот язык без лайфтаймов (о, какой ужас) и даже со сборщиком мусора (будь они все прокляты) нагибает БОЖЕСТВЕННЫЙ РАСТ

И этот персонаж немного выше распинался об оптимальных инструментах для решения разных задач.

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

а что мешает эти два языка использовать совместно?

Например, отсутствие простого и прозрачного интероперабилити. Из Rust-а просто так не получится использовать какой-нибудь Eigen. Точно так же не получится из C++ использовать какой-нибудь Actix.

Неужели Раст настолько божественнен, что возможность для других языков стать хотя бы его эрзацем просто восхитительна по своей сути?

Rust у*бищен в своем синтаксисе и многие растоманы являются какими-то упоротыми маргиналами с проблемами в мировосприятии.

Тем не менее, на данный момент это единственная достойная замена C++ среди императивных нативных языков без GC. К неоспоримым достоинствам которого можно отнести гораздо меньше возможностей отстрелить себе ногу, современную инфраструктуру вокруг языка, отсутствие тяжкого наследия в виде совместимости с C и толп «якобы C++ников», которые на C++ программируют так, что лучше бы и не программировали.

Поэтому противопоставление C++а и Rust-а вполне уместны. Особенно в плане попыток привнести в C++ то хорошее, что смогли сделать в Rust-е.

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

В какой параллельной вселенной выгодно поддерживать кодовые базы и либы на двух разных языках, которые могут общаться только через C FFI?

Да мы вроде в одной вселенной, нет?) На самом деле бывает. Но вот про то, что раст не может вызывать плюсы напрямую я не подумал, каюсь. Но даже в этом случае отдельные компоненты могут быть написаны на с++ и расте, например, если они взаимодействуют по сети. Например, модуль, который крутится 24/7 написан на плюсах квалифицированными программистами, а модуль, выполняющий бизнес-логику - питонистами-финансистами всякими. Ему и падать не больно будет.

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

И этот персонаж немного выше распинался об оптимальных инструментах для решения разных задач.

Не вижу никакого противоречия. Я по прежнему считаю, что Раст замечательный язык, который показал новый подход к решению старых проблем. Но в нем столько хайпа, что нельзя не обратить внимание на то, что он не божественнен, он имеет компромисы. Просто для каждой задачи нужно выбирать свой инструмент, где-то раст оптимален. А где-то нет. Вот и все. И уж точно не стоит пытаться плюсы превращать в его эрзац.

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

Так вот язык без лайфтаймов (о, какой ужас) и даже со сборщиком мусора (будь они все прокляты) нагибает БОЖЕСТВЕННЫЙ РАСТ

И этот персонаж немного выше распинался об оптимальных инструментах для решения разных задач.

Не вижу никакого противоречия.

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

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

Бизнес по переписыаанию программ с нуля каждые пару лет? Да, эти рады.

Се ля ви.

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

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

Rust у*бищен в своем синтаксисе

Опять 25. Что же в нём такого уёбищного в сравнении с тем же C++? И если синтаксис C++ такой классный, то почему всякие новомодные свифты с котлинами куда больше похожи на раст нежели на божественный C++?

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

Rust у*бищен в своем синтаксисе и многие растоманы являются какими-то упоротыми маргиналами с проблемами в мировосприятии.

Тем не менее, на данный момент это единственная достойная замена C++ среди императивных нативных языков без GC. К неоспоримым достоинствам которого можно отнести гораздо меньше возможностей отстрелить себе ногу, современную инфраструктуру вокруг языка, отсутствие тяжкого наследия в виде совместимости с C и толп «якобы C++ников», которые на C++ программируют так, что лучше бы и не программировали.

Поэтому противопоставление C++а и Rust-а вполне уместны. Особенно в плане попыток привнести в C++ то хорошее, что смогли сделать в Rust-е.

Согласен со всем вышесказанным, ибо это здравое рассуждение. Я за то, чтобы плюсы развивались и брали из других языков. А еще лучше если бы плюсы стали отказываться от тяжелого наследия - это было бы даже более полезным. И не только от триграфов всяких. Я только призываю воздерживаться от культа личности и не начинать из плюсов лепить подобие Раста. А почему не Лиспа? Почему не Хаскеля? Или Ады?

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

Что же в нём такого уёбищного в сравнении с тем же C++?

Желание экономить на буквах, например. Или использование апострофов как значимых символов. А так же довольно странные сочетания символов, например, ..=.

нежели на божественный C++?

Я разве говорил, что C++ божественнен?

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

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

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

Да е-мое) Я же привел пример (ну да, не удержался от сарказма) что есть задачи где хорош питон, а есть задачи где хорош раст. Все. Ну есть же здравый смысл, в конце концов. Не будет ни Раст, ни какой-то другой язык языков на все случаи жизни, который должны будут учить все. И си и си пэ пэ играли такую роль достаточно длительное время, но это только потому что не было альтернативы. Тот же Раст кстати. Сейчас будет использоваться множество языков.

З.Ы. Ну и про «нагибательство» это же сарказм был. Если серьезно, то Питон и Раст по сути дополняют друг друга.

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

Чуваки! Я много время отдал плюсам, я был защитником этого языка. Я знаю что если ты плюсовик и ты работал в разных сферах, то тебе любые задачи по плечу.

Но..... C++ сегодня это просто печаль в виде синтаксической каши. Если бы плюсы 2003 года оставались бы просто еще одним языком, то ладно. Но сейчас это просто жесть. Попытка сделать высокоуровневым то что изначально было само по себе низкоуровневым. C лучше плюсов, говорю как человек педалящий на работе на плюсах.

Я уже давно понял что все ЯП говно. Можно придраться к чему-угодно ОБОСНОВАННО.

У меня есть особое отношение к веб, и я называю людей вебмакаками, не потому что они не знают и не использует C++. А просто так получилось, что ничего тяжелее сайтиков с текстом и картинками больше ничего нет. У меня на работе ломать голову над семантическим разбором естественного языка - а для них иммутабильность и HTML - вершина прогресса.

Как правило инструмент определяет сферу применения. А сфера определяет специалиста.

У меня коллега на проекте и на питоне пишет, и с прошивкой работает. Работа в сфере ComputerVision. Типа свой «автопилот» пишем.

И если ты плюсовик, то ты уже знаешь железо, ты знаешь софт, ты знаешь теорию и CS. Ты инженер который решает задачу, которую до тебя еще никто не решал, или нет готовго решения близко.

А вебмакака как писала сайтики, так и пишет. Оно как знало JS и PHP.

Я был студентом в середине 2000-ых и у меня был однокашник Сашенька учил он PHP. Прошел десяток лет, он как был пхпешником так им и остался. Сашенько до сих пор в 2018 году все веб да веб.

А от меня и от моих соратников давно требует решений. Мы уже не пишем код, мы решаем задачи. А там C/C++/Python/Rust - это всего-лишь инструмент.

Просто так получилось что C++ занял highload или sciense нишу. И что нам нем реализуется критическиважные вещи. И сколько побегал по собеседованиях где были медицинские проекты.

Когда твоя ошибка - это жизнь поциента. Когда 9999 тестов гонять аппаратуру.

А у вебмакак сайт не загрузился один-два раза - ничего страшного. Элементы поплыли - не страшно. Сервер тупо упал - не страшно. (если не сервер с коммерцией).

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

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

Я за то, чтобы плюсы развивались и брали из других языков.

Есть мнение, что C++ уже достиг пределов сложности обычных разработчиков. И с каждым новым стандартом вход в C++ для новичков становится все сложнее и сложнее.

Если это мнение верно, то любое дальнейшее развитие C++ будет только усугублять положение этого ЯП.

Я только призываю воздерживаться от культа личности и не начинать из плюсов лепить подобие Раста.

Действующие разработчики на C++, которые не сильно довольны ситуацией с этим языком, делятся на две категории:

  • те, кто может сменить C++ на Rust. Полагаю, таковых исчезающе мало. Тот же tailgunner вряд ли в ближайший год-два сможет использовать на работе Rust;
  • те, кто не может это сделать.

Вот последние, вероятно, не прочь поиметь в C++ хоть какие-то плюшки из Rust-а.

А почему не Лиспа? Почему не Хаскеля?

Например, отсутствие GC.

Или Ады?

Да вроде как C++ давно мощнее и удобнее в промышленной разработке, чем Ada.

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

Я выбрал путь плюсовика и автоматически пошли интересные проекты.

Какой молодец. Пирожок с полочки уже взял?

eao197 ★★★★★
()

Калечный синтаксис у растишки только в описаниях типов. Этим типам вообще достаётся незаслуженно мало внимания. Это ж, по сути, отдельный язык в языке. Синтаксис основного языка в Расте с самого начала хорошо продумали - for, if, let, match, вот это всё. А язык описания типов развивался как попало. Содрали угловатый синтаксис дженериков с жабоплюсов, потом вхреначили всякие + и : из ML и гопник хаскеля, потом от балды приколхозили impl Trait - чисто потому, что слово impl уже зарезервировано. Как бы, никто до этого не задумывался, что в языке могут понадобиться экзистенциальные типы. Только сравнительно недавно нашлись чуваки, которые нашёлся чувак, которые осознали, что вся эта от балды придуманная система трейтов вообще unsound. Стали, например, придумывать свой формализм для системы типов на основе логики. То есть, до этого вообще ни у кого не было чёткого понимания, как эти трейты должны работать. С другой стороны, язык ещё молодой и особо не связан обратной совместимостью - вычистят постепенно.

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

Какой молодец. Пирожок с полочки уже взял?

Давно взял.

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

Только сравнительно недавно нашлись чуваки, которые нашёлся чувак, которые осознали, что вся эта от балды придуманная система трейтов вообще unsound.

Таким образом, система типов Rust unsound? Где бы об этом почитать?

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

Давно ждал конктретики в виде u32 i8 и все такое. Но ты наверное не про это.

С другой стороны, язык ещё молодой и особо не связан обратной совместимостью

Подожди немного! Скоро мой любимый раст обрастет наростом из синтаксического мусора и будет история как с C++.

Эти ж товарищи не собираются останавливаться на impl Trait

baist ★★
()

Вставлю как и немного критики. Саммому понравился Rust и сам начал свои проекты делать - особенно «композитор Wayland без сишных байндингов».

Что напрягает? Напрягает неоднозначность разыменования ссылок. Тут есть автоматика, там ее нет. В одном случае надо писать звездочку в другом нет. Напрягает чужой код с 9000 lifetime везде и всюду, разруливать которые надо и надо четко как оно работает. Это уже чисто визуально пугает и делает текст не слишком читабельным.

Касательно библиотеки. При обработке символов выяснилось что метод Read::chars() нестабилен. Приходится изворачиваться чуть по другому. Чтобы знать идущий символ за символом a надо приводить его в u32 и обратно. Потому что операторы сравнения > = < для char есть, а вот метода типа next нету.

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

Скоро мой любимый раст обрастет наростом из синтаксического мусора

Дык, не хотим стандарт, не хотим спеку, хотим перетрахивать синтаксис каждый месяц. В рот им смузи.

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

Какой может быть конструктив от человека, никак не влияющего на разработку Rust-а.

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

Это субъективщина и вкусовщина, но это как раз те факторы, которые отталкивают от языка.

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