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

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

Rust, в отличие от компилятивных Python и Ruby (и того же Go) - это результат исследований. Я видел как минимум две провальные попытки сделать безопасный системный язык (хотя, наверное, BitC можно считать не одной, а двумя попытками) - это реально rocket science по сравнению с очередным динамически типизированным язычком или музейным экспонатом вроде Go. Так что да, без Мозиллы не было бы Rust, как без Гугла не было бы Go, но в Rust видно, куда потрачены деньги (и я не видел, чтобы Мозилла особо вкладывалась в пиар Rust).

по правде говоря, я сам не могу найти аргументов в пользу C/C++/Rust/Ada для проектов, вроде недавно открытого Netflix-ом Titus-а

Линус не мог найти аргументов, чтобы использовать для Git что-то, кроме Си.

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

Rust, в отличие от компилятивных Python и Ruby (и того же Go) - это результат исследований.

На это можно положить большой болт как только речь заходит об использовании языка для решения практических задач. Рокет сайнс в языке или нет, но если задача с помощью языка X решается в разы быстрее и дешевле, чем с помощью языка Y, то на теоретический базис всем пох. Ну, за исключением экспертов в LOR-овских срачах.

и я не видел, чтобы Мозилла особо вкладывалась в пиар Rust

Ну и вот мы имеем тот факт, что через три года после релиза Go 1.0 язык Go уже широко использовался. А использование Rust-а где-то на уровне статпогрешности. И даже большинство местных Rust-одрочеров на Rust код за деньги не пишут, разве что в свободное от работы время для своего удовольствия.

Линус не мог найти аргументов, чтобы использовать для Git что-то, кроме Си.

Тогда Go еще не было.

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

Остается понять зачем мозилле исследовательский системный язык. Пока исследовали прокакали свой рынок. Хитрый план наверно.

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

Rust, в отличие от компилятивных Python и Ruby (и того же Go) - это результат исследований.

На это можно положить большой болт как только речь заходит об использовании языка

А ты где-то увидел, чтобы я говорил об использовании языка? Я говорил строго о происхождении Rust и Go, и роли их родительских организаций.

мы имеем тот факт, что через три года после релиза Go 1.0 язык Go уже широко использовался. А использование Rust-а где-то на уровне статпогрешности.

Хотелось бы статистики - кем и как использовался Go в 2012. А так - есть столько причин более широкого использования Go, что мне даже лень перечислять.

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

в свободное от работы время для своего удовольствия

Охлол, так и вижу кодера, тратящего выходные на мозголомки с растом. Уверен, что 90% местных растофанов — студни. Точно знаю только одного чувака с реальным опенсорц-проектом. А их главарь тылганнер так вообще раст только читает. Самый мудрый.

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

Хотелось бы статистики - кем и как использовался Go в 2012

В 2013 вышел докер, в 2014 хайп уже гремел вовсю. Надеешься, что раст к 2020 вылезет из маргинальной землянки? Хахаха!

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

А ты где-то увидел, чтобы я говорил об использовании языка?

Это я говорил об использовании языка. И о том, как повлияло на его использование наличие за спиной крупных корпораций. А ты перевел тему в русло теоретического наследия.

Хотелось бы статистики - кем и как использовался Go в 2012.

Официальный релиз Go 1.0 состоялся весной 2012-го — цинк. Известно о нем (т.е. о языке Go) стало с осени 2009-го, но 1.0 выпустили не сразу. И через три года после релиза Go 1.0 — это уже 2015-й.

Про Rust стало известно задолго до версии 1.0 в мае 2015-го. Так что здесь ситуация на Go очень похожа.

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

Хотелось бы статистики - кем и как использовался Go в 2012

В 2013 вышел докер

в 2012

В 2013

Окей.

Надеешься, что раст к 2020 вылезет из маргинальной землянки?

Надеюсь, конечно. Но если этого не случится, я переживу.

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

Как go 1.0 вышел, так народ и ломанул на нем писать _продукты_. А раст 1.26 по-прежнему площадка для хеллвордщиков.

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

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

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

Язык пригоден для промышленного программирования

И? Я напомню, о чем идет речь: 1) Go как язык - говно 2) популярностью своей он обязан Гуглу. Ты с каким-то из этих утверждений споришь?

Т.е. гугл молодец, а мозилла лохе.

Похоже на радость футбольного болельщика, который с пивом и пузиком прыгает на диване и вопит «Гоооол!!!!11».

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

Go как язык - говно

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

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

1) Go как язык - говно

В свое время dBase/FoxBase/Clipper были отнюдь не меньшим говном, только вот ни C, ни C++ для них конкурентом не были. И на практике хлеб с маслом они программистам приносили отнюдь не хуже.

2) популярностью своей он обязан Гуглу

Ну вот с этим вопросом, как минимум, все не так однозначно.

Похоже на радость футбольного болельщика, который с пивом и пузиком прыгает на диване и вопит «Гоооол!!!!11».

Так и ты такой же больщик, только болеешь за другую команду.

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

1) Go как язык - говно

В свое время dBase/FoxBase/Clipper были отнюдь не меньшим говном

Даже большим. Но это не делает Go ни на йоту лучше.

2) популярностью своей он обязан Гуглу

Ну вот с этим вопросом, как минимум, все не так однозначно.

Ну, если размер Гугла и количество кода, который пишут его программисты на зарплате - это что-то неоднозначное, то окей.

Т.е. гугл молодец, а мозилла лохе.

Похоже на радость футбольного болельщика, который с пивом и пузиком прыгает на диване и вопит «Гоооол!!!!11».

Так и ты такой же больщик, только болеешь за другую команду.

Не припоминаю за собой оценок вроде «молодец» и «лохе».

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

Но это не делает Go ни на йоту лучше.

Глупо говорить про «лучше» или «хуже» вне каких-то внятных критериев. С точки зрения computer science язык Go, возможно, хуже Rust-а. С точки зрения решения практических задач в определенных предметных областях все ровно наоборот.

Мне, как следящему за развитием Rust-а и Go исходя из соображений практической применимости и восстребованности, интересен именно практический аспект.

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

Ну, если размер Гугла и количество кода, который пишут его программисты на зарплате - это что-то неоднозначное, то окей.

Мало кто имеет понятие о том, сколько на Go пишут в Google.

Но я спорю по другому поводу: ты говоришь, что своей популярностью Go обязан Google. Я же думаю, что вклад Google в популярность Go относительно небольшой. Гораздо важнее то, что Go оказался именно таким, каким он нужен современному софтостроению. По крайней мере в определенных областях.

Не припоминаю за собой оценок вроде «молодец» и «лохе».

Но ведь ты на диване, а не на футбольном поле.

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

Глупо говорить про «лучше» или «хуже» вне каких-то внятных критериев.

У меня есть вполне внятные критерии - минимальные требования к современному языку программирования. Go им не отвечает.

интересен именно практический аспект.

А мне - нет. Если я вынужден буду программировать на Go... значит, так сложилась жизнь и обсуждать нечего.

Но ведь ты на диване, а не на футбольном поле.

Но ведь я не болею.

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

требования к современному языку программирования

Может это ты себя обманываешь и считаешь, что в современном языке должно быть то, что интересно тебе. А вовсе не то, что нужно современной индустрии.

А мне - нет.

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

Но ведь я не болею.

Выглядит наоборот.

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

Может это ты себя обманываешь и считаешь, что в современном языке должно быть то, что интересно тебе. А вовсе не то, что нужно современной индустрии.

Нет. Просто индустрия умеет пользоваться и устаревшими языками (даже устаревшими еще до рождения).

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

Но ведь я не болею.

Но ты удалил тыщи комментов с набросами на раст и мозиллу. При том, что на лоре набрасывают на всё равномерно, такая избирательность намекает.

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

Но ты удалил тыщи комментов с набросами на раст и мозиллу.

Миллиарды удаленных лично тейлганнером, ага.

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

Это он тебе кажется неинтересным, потому что ты в очень специфической нише работаешь. А тем, кому нужно в компании недавних войтишников за короткие срок REST API прицепить к какой-нибудь бизнес-ориентированной херне (в сторону которой ты даже и смотреть не будешь), язык гораздо более интересный и практичный, чем всякие Rust-ы с плюсами.

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

REST API можно и на жабке написать; с точки зрения разумного баланса «порог вхождения в язык поменьше, но язык получше» я бы предложил жабку

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

Вот в пхп4 была адская помойка из функций, но язык взлетел ого-го.

язык взлетел не во время пхп4, а во время пхп3 или может даже пхп2, и язык там был очень сильно отличающийся от пхп5 (и емнип от пхп4)

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

Рокет сайнс в языке или нет, но если задача с помощью языка X решается в разы быстрее и дешевле, чем с помощью языка Y, то на теоретический базис всем пох.

в разы быстрее и дешевле

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

в разы быстрее и дешевле

а как насчет надежности решения? это вообще во внимание не принимаем?

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

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

там, как минимум, titus-executor на Go написан

не потому ли, что докер на Go написан?

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

а go точно взлетел? есть объективные данные?

а то может я живу в башне из слоновой кости, но как-то его вокруг совсем не вижу

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

Он дал миру простой компилируемый в натив язык с GC.

емнип в D ver.1 было то же самое — простой компилируемый в натив язык с GC

Прикинь, кодить легко как на пхп, а на выходе эффективный бинарь.

так не бывает

Прикинь, кодить легко как на пхп, а на выходе эффективный бинарь.

на том пхп, которое взлетело (а это пхп3 и может отчасти 4, без его его нынешнего ооп и закосов под жабку) писать веб-страницы куда легче, чем на go

на нем писали как-то так:

<html>
<? if ($user) { ?>
Hello, <? echo htmlspecialchars($user) ?>
<? }else{ ?>
Please enter your name:
<form><input type=text name=user><input type=submit></form>
<? } ?>
</html>

и как это будет на go? (код скорее всего не рабочий, на я пхп 100 лет уже не писал)

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

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

ок, ты — менеджер

твои быдлокодеры быстро наваяли тебе аппликуху, она типа работает, но уж больно тормозит; devops твоей аппликухи приходит к тебе и говорит, что у него есть идея почему так, и надо бы померить статистику передачи данных по каналам go

твои действия?

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

и как это будет на go?

Ну ты дремучий. Примерно так же и будет, но на урезанном языке шаблонов конечно. А логика будет точно как на похапе: if, for, перекладывание данных по спискам и мапам, дерганье готовых функций, вот этот весь пограмизьм. Ну чуть-чуть аннотаций добавится, зато компилятор бьет по рукам больнее, профит.

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

И кстати, никто не пишет же веб на шаблонах теперь. Бэкенд плюет json, странички готовят на клиенте. Ну то есть похапе совсем ненухным стал.

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

ок, ты — менеджер

Ok, ниче не понял что ты ниже написал, но Го - современный популярный эффективный язык, разрабатываемый корпорацией Гугл. Конечно же наши инженеры справятся с любыми задачами на нём. Давай дэнги!

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

Ну ты дремучий.

мне прям щас заплакать или подождать немного?

Примерно так же и будет, но на урезанном языке шаблонов конечно.

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

А логика будет точно как на похапе

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

пхп взлетел из-за того, что там кинул 10 строчек в 1 файл — и вот тебе готовая *рабочая* страница

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

И кстати, никто не пишет же веб на шаблонах теперь. Бэкенд плюет json, странички готовят на клиенте. Ну то есть похапе совсем ненухным стал.

гы-гы, если *в этом сценарии* пхп совсем не нужен, тогда и go совсем не нужен — бэкенд уже давно написан, странички готовят на клиенте

на самом же деле кто-то должен проверять хотя бы авторизацию (ну и вообще бизнес-логику хотя бы на тему «есть у клиента такие права или нет») — и это точно не код, который крутится на клиенте

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

разрабатываемый корпорацией Гугл. Давай дэнги!

так бы сразу и написал; это называется не «для менеджеров прекрасный язык», а хайпованный язык

www_linux_org_ru ★★★★★
()
extern crate facepalm;
anonymous
()
Ответ на: комментарий от www_linux_org_ru

Я такой специалист по гоу, что прям офигеть, так что не буду врать про деплой. Но можешь сам нагуглить как сервер в докере разворачивать в 5 строчек. От го как раз в восторге были всякие рубисты из-за сказочно простого деплоя (кто рельсы разворачивал, тот в цирке не смеется). Похапе только в одном заруливает: можно править скрипты прямо на боевом сервере, это да.

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

на самом же деле кто-то должен проверять хотя бы авторизацию (ну и вообще бизнес-логику хотя бы на тему «есть у клиента такие права или нет»)

Решил покапитанить? Вот этим бэкенд и занят, и го ничем не хуже пхп для этих задач, а на самом деле лучше (если не забывать, что пхп — это такой наколенный шаблонизатор-переросток).

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

Решил покапитанить?

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

Вот этим бэкенд и занят, и го ничем не хуже пхп для этих задач [бизнес-логики], а на самом деле лучше (если не забывать, что пхп — это такой наколенный шаблонизатор-переросток).

не хуже, но и не лучше

язык для бэкенда зависит много от чего, и четкого преимущества по всем (или большинству) параметров у go тут нет

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

Попался, похапешник. Хихихи.

это ты наверно мне хотел написать?

пхп например очень хорошо для того, чтобы за 15 минут сделать гуй для какой-то проги с ком. строкой в рамках интранета (где досить тебя никто не будет, на xss, sql injection, ... можно наплевать, и т.д.) — поэтому его знать полезно примерно как знать bash  — bash тоже дырявый насквозь (если им пользоваться так, как пользоваться удобно), но работу ускоряет и облегчает

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

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

Боюсь, для современных войтишников современная Java будет сложнее в освоении и использовании, чем Go. Как минимум по трем причинам:

1. В Java тотальный и убогий ООП. Т.е. даже маленькую программку, которую в C/C++/Go можно написать в процедурном стиле, в Java придется обрамлять в какой-то класс. Тогда как в Go переход к ООП (в стиле Go) можно делать только там, где это нужно.

2. В Java исключения, причем не просто, а checked exceptions. Тогда как в Go простой как две копейки возврат пары значений. Ну и panic-и для экспертов. Плюс к тому в Go очень простой механизм автоматической чистки ресурсов — defer. Тогда как в Java есть и совсем древний finally (в котором еще нужно думать про исключения), и более современный try-with-resources.

3. В Java есть generic-и. Причем довольно хитрые, к которым еще и привыкнуть нужно. Тогда как в Go человек либо использует встроенные в язык map-ы (что очень просто), либо вообще с generic-ами дел не имеет.

Ну и нельзя не сказать, что в Java сейчас основные сложности при входе — это даже не сам язык, а фреймворки. На голой Java вряд ли что-нибудь пишется. Поэтому кроме Java разработчику нужно будет еще и какой-нибудь Spring и/или Hibernate (или что там еще сейчас широко используется) освоить.

это скорее редкий случай

От предметной области зависит.

а как насчет надежности решения?

А что не так с надежностью у Go? Память течет? Буфера переполняются? UB в коде на каждом шагу?

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

Поэтому кроме Java разработчику нужно будет еще и какой-нибудь Spring и/или Hibernate (или что там еще сейчас широко используется) освоить.

Вот-вот, и это моментально повышает сложность в разы, если не на порядки. Кстати, в пхп тоже теперь монструозные ООП фреймворки. Так что действительно кодить на современном пхп уже не так легко. И тут появляется Го, который реально не сложнее пхп4 монструозностями не оброс, а задачи на стороне сераера решает столь же успешно.

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

это ты наверно мне хотел написать?

У тебя мания величия? Нет, я не настолько был пьяным. Уж тебя я то хорошо помню, о гуру цепепе. И сразу видно же, что ты ни бум-бум в вебне.

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

Ну и нельзя не сказать, что в Java сейчас основные сложности при входе — это даже не сам язык, а фреймворки.

речь шла не о яве вообще, а о яве с целью «за короткие срок REST API прицепить к какой-нибудь бизнес-ориентированной херне»; с виду тут фреймворки совсем не нужны

ну и остальные пункты примерно в том же духе; например, checked exceptions могут создать трудности, но в случае «прицепить» я совершенно не вижу какие — можно их просто тупо отдавать в формате ошибки этого самого REST API, не?

да и именно из-за checked exceptions тут ява сильно выигрывает — поди уследи за этими говнокодерами, че они там делают с кодами возврата, а на счет исключений можно грепнуть проект по слову catch и увидеть, что их обработка ровно в одном файле (и даже может в одной функции)

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