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

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

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

Специально проверил, по дефолту там «Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0».

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

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

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

asm(можно и без конечно), установки своего аллокатора(это feature gated), что-то там ещё было сильно специфичное.

Если писать под линукс, то в общем-то stable достаточно.

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

Нет! просто некоторые товарищи не понимают теории, а понимают «Это в Java так называется».

Полиморфизм, это когда одна форма объектов, но разные реализации объектов. Это философская трактовка. Для ООП будет трактовка «один интерфейс — много реализаций», для ФП «обрабатывать значения разных типов идентичным образом»

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

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

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

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

Щито поделать, десу.

То как сделано сейчас - хреново. Как сделать лучше никто толком не понимает как я понимаю.

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

в rust недавно ввели т.н. «эпохи», которые будут сменяться каждые 2-3 года.

Основное требование - код, компилирующийся без варнингов в эпохе N, должен компилироваться (но, возможно с варнингами) и демонстрировать аналогичное поведение в эпохе N+1.

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

Первый релиз по этому новому циклу (epoch 2018) обещают осенью.

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

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

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

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

Лол, олдовые питонщики давно с него слазят, а взамен лезут одни вебари-недоучки и всякие «дата сайентисты». На питоньи форумы уже ходить стыдно.

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

Стандартные библиотечные функции и внешние функции не считается. Язык - это определенный набор лексических, синтаксических и семантических правил. Язык как форма взаимодействия описанный набором грамматик.

Я как раз пишу парсер C и C++ на Rust, мне это известно хорошо. Box - это не часть языка Rust, это часть окружения Rust. Потому что язык программирования и std делается отдельно.

Вот когда Box внедрят в синтаксис, тогда и будем говорить. Точнее не будем говорить ибо это уже будет очередной синтаксический сахар для Rust и мне придется его бросить.

Потому что язык программирования пишется программистом и для программистов и в нем должна быть чистота идей и должен быть выразительным. Иначе это очtредной C++ с lifetime.

baist ★★
()

На мой взгляд Rust - один из лучших языков программирования на сегодняшний день. Заставляет задуматься, а так ли нужен другой язык со сборщиком мусора? В отличие от C++ заставляет задуматься гораздо чаще, по крайней мере, меня.

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

А ты не видишь тенденция какая!? С каждым разом все запихивают и запихивают новое и новое. Ладно там std расширяют - в раст можно и без std. Но язык поганить всякими ?.

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

Динамического полиморфизма в расте нет.

Box<Trait>

И Trait&

Стандартные библиотечные функции и внешние функции не считается.

Шта?

Вот когда Box внедрят в синтаксис

Ты читаешь то, на что отвечаешь? Еще раз: Trait&. Раскажи мне, что это не динамический полиморфизм.

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

язык поганить всякими ?

Беги-ка ты на лисп, тебе нигде больше не будут рады.

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

tailgunner там еще в следующем пункте термин надо пофиксить плз

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

Выдави себе глаза, делов-то.

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

Либо так, либо исключения.

Не, ну, строго говоря, речь не о том, как возвращать ошибки, а о том, что этот пурист хотел бы продолжать тратить время на написание и чтение try!(…) ради соблюдения Чистоты Синтаксиса.

thriller ★★
()

Рак даёт метастазы. Начали появляться вакансии на этом недоязыке

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

А, вспомнил что мне сильно не нравилось - чтобы оторвать нахрен jemalloc надо nightly врубать, иначе никак.

Правда это сильно специфичное действо и нужно не только лишь всем.

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

Постой-ка, но раст — системный язык, а пистон — какая-то скриптотень для тупых админов и вумных (но далеких от ойти) ученых. Какбе совершенно разная ЦА. Кто и зачем может оттуда переходить? Что сишники ваш раст вертели кое-на-чем, то я слышал, и это ожидаемо. Но вот пистонщики... Прокачать ЧСВ хеллвордами разве что.

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

На мой взгляд Rust - один из лучших языков программирования на сегодняшний день.

А как же общелисп?

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

Трейтобъекты и ссылки на трейтобъекты у тебя тоже не часть языка?

Ты внимательно читал о чем я писал????????????

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

Rust, похоже, нечаянно получился еще и языком общего назначения.

пистон — какая-то скриптотень

Python - довольно приличный (для динамически типизированного) прикладной язык.

для тупых админов и вумных (но далеких от ойти) ученых

Админы, я думаю, никуда и не переходили.

Прокачать ЧСВ хеллвордами разве что.

Так всё с этого и начинается.

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

Шта?

Давай я буду говорить что C++ имеет сборщик мусора, потому что там есть std::shared_ptr. И что С++ на 100% безопасный язык, ведь есть же boost, Qt, STL.

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

Админы, я думаю, никуда и не переходили.

Умные - да, не переходили, они так на перле-тикиле и сидят, а остальные как вошь прыгают по рубям-питонам-го-нодежс

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