These are chat archives for dev-ua/rust

17th
May 2015
Ivan Kurnosov
@zerkms
May 17 2015 01:41
Господа, а помогите с вопросом http://stackoverflow.com/q/30282497/251311
вкратце, не могу понять почему он не может вывести типы сам и как ему помочь
Ivan Kurnosov
@zerkms
May 17 2015 09:36
А в этом чатике кто-то пишет на расте "по-взрослому", чтобы не баловаться, а хоть какой-никакой продакшн?
Если таковые есть, то как вы живёте с error: borrowed value does not live long enough?
Для chained expressions типа range.iter().map........
Неужели на каждый чих создаёте промежуточную переменную?
Ivan Kurnosov
@zerkms
May 17 2015 10:20
let right = select(&tail.clone()).iter();
@RReverser
Вот этот код уже валится с той ошибкой, и требует, чтобы я отдельно результат вызова select в отдельную переменную
У tail тип Vec<T>
А вот сигнатура селекта select<T : Clone>(v: &Vec<T>) -> Vec<Pair<T>>
            let right = select(&tail.clone());
            let iii = right.iter();
т.е. вот так оно уже компилится
Ingvar Stepanyan
@RReverser
May 17 2015 10:25
що за select?
покажи плз в плейграунд повний (не)робочий код, а то по кусках нічого неясно
Ivan Kurnosov
@zerkms
May 17 2015 10:26
Ну я привёл сигнатуру
хехе
плейграунд будет создать непросто
я экспериментирую, и у меня тут ОМГ
:-D
Ingvar Stepanyan
@RReverser
May 17 2015 10:26
ну хоча б пруф-оф-концепт )
а то так складно щось сказати
Ivan Kurnosov
@zerkms
May 17 2015 10:27
только не смотри на детали ))) это просто эксперименты над языком
(и над той статьёй про constraint solver + монады от бартоша)
Ingvar Stepanyan
@RReverser
May 17 2015 10:27

я взагалі з Rust, як ти кажеш, чисто "грався", але мене зачепило

Как вообще можно язык назвать мультипарадигменным и не мочь зачейнить вызовы

тому й почав спорити :) так як чейнити їх в принципі можна (що я і показав), скоріше трабла в конкретному коді

Ivan Kurnosov
@zerkms
May 17 2015 10:28
вот так ещё короче
Ну эм, если он не позволяет чейнить вызовы - то это проблемы языка
Ingvar Stepanyan
@RReverser
May 17 2015 10:29
Ну він дозволяє (я показував в своїх прикладах), тому не проблеми мови
Те що не працює конкретний код - це вже трабла конкретного коду. Так не буває, що мова щось дозволяє "в упрощенном коде", а в складнішому фіча спеціально недоступна )
Ivan Kurnosov
@zerkms
May 17 2015 10:30
Нет, он позволяет в примитивном случае
Ingvar Stepanyan
@RReverser
May 17 2015 10:30
Ну, знову-таки, так не буває
Це означає що код просто фічу неправильно юзає
Мова сама по собі не фільтрує по "примітивний код" / "непримітивний"
Фіча в цілому є - є, значить першопочаткове твердження неправильне
В цьому коді знову-таки в тебе right далі не юзається
Ivan Kurnosov
@zerkms
May 17 2015 10:32
вот
я упростил его до 4 строк
вот ещё проще и короче
Ошибка не связана с использованием right - даже если ты его заюзаешь ничего не изменится
Конкретно в этом коде проблема в том, что Vec<T> который вернул select живёт недостаточно долго
Ivan Kurnosov
@zerkms
May 17 2015 10:38
Или погоди, или и вправду потому что right не юзается
:-S
Ingvar Stepanyan
@RReverser
May 17 2015 10:38
finally! :D
Ivan Kurnosov
@zerkms
May 17 2015 10:38
чота у меня неделя не задалась
фейл за фейлом
:facepalm:
Ingvar Stepanyan
@RReverser
May 17 2015 10:39
та буває
головне - добре, що розібрались
Ivan Kurnosov
@zerkms
May 17 2015 10:39
Неудобно, что нет из коробки конкатенации двух векторов
все оба два метода помечены анстейбл
Ingvar Stepanyan
@RReverser
May 17 2015 10:40
ну сама мова ще чуток анстейбл, тут нічого не зробиш
в будь-якому разі краще ніж раніше
коли код за два тижні встигав устарівати і не працював в новій версії
Ivan Kurnosov
@zerkms
May 17 2015 10:40
Эх, ну раз такое дело придётся дописывать мою херовину
а то я уж думал всё плохо и можно отступить
Ну а в чём причина ошибки-то всё-таки?
Почему тот факт, что переменная не юзается, так странно влияет
наоборот же компилятору проще должно быть
Ingvar Stepanyan
@RReverser
May 17 2015 10:43
Питання не до мене, скоріше до авторів. Але, наскільки розумію, суть в тому що як "супер-безпечна" мова в ній будь-які операції, які приводять до невалідного коду (типу map по ітератору, результат якого далі ніде не юзається), є саме error, а не warning.
Типу для зменшення можливості написання говнокоду.
Ivan Kurnosov
@zerkms
May 17 2015 10:43
но невнятная ошибка получается
Ingvar Stepanyan
@RReverser
May 17 2015 10:43
це да
Ivan Kurnosov
@zerkms
May 17 2015 10:43
если не заюзал итератор - то расстрел на месте
ну так компилятор вообще мог по идее всю инструкцию выпилить из бинарника
Ingvar Stepanyan
@RReverser
May 17 2015 10:44
хоча... в цілому "does not live enough" ~= "is not used in future"
міг, але код невалідний в оригіналі остався би, а такого допустити за ідеологією не можна :)
Ivan Kurnosov
@zerkms
May 17 2015 10:44
не всегда, ещё это ведь "is used when it's already died"
вот я именно так это и трактовал
Ingvar Stepanyan
@RReverser
May 17 2015 10:44
компілятори взагалі могли б автоматом фіксити більшість навіть синтаксичних помилок, але ж цього не роблять
Ivan Kurnosov
@zerkms
May 17 2015 10:44
ибо в доке на это и делается упор
@RReverser http://is.gd/IxcmWN
а вот кстати нет
использование не меняет ничего
Ivan Kurnosov
@zerkms
May 17 2015 10:57
Ещё можно решить вот так http://is.gd/E0MZQ3
Но хз
А! Я понял
Время жизни временного объекта получается в пределах стейтмента
Временный объект - вектор, который вернули из select()
далее - мы создаём итератор
и итератор юзаем в следующем стейтменте
но итератор уже невалидный
Ибо временный объект уже освободился
всё, теперь понятно
И оно всё-таки никак не связано с тем, что результат не юзается
Kostiantyn Rybnikov
@k-bx
May 17 2015 11:49
"Результат не юзається" має конкретну і зрозумілу помилку http://doc.rust-lang.org/nightly/book/iterators.html#iterator-adapters , тож це не воно
Btw, дуже рекомендую rust release party самих Мозилівців глянути http://www.reddit.com/r/rust/comments/365f30/rust_10_release_party_video_on_airmozilla_is_up/
Виявилося, що в Раст приходять залежні типи :)
Nick Palamarchuk
@lividgreen
May 17 2015 15:08
чо-то я так и не понял почему та ошибка возникает...
почему из select() возвращается временный объект?
Kostiantyn Rybnikov
@k-bx
May 17 2015 15:51
Здається я зрозумів. http://is.gd/2c7UZY
Або правильніше поставити "&" перед select()
Nikita Khomitsevich
@hamsternik
May 17 2015 15:58
ребят, немного оффтопну
сегодня днем наткнулся на статью о "new cool language" Nim
кто-то про такое слышал?
хотя суть вопроса не в этом
вот чувак в комментах написал
http://habrahabr.ru/post/258119/#comment_8421231
что теперь на расте не ведтся разработка unix kernel
а что, велась?
кто-то про порт на rust слышал?
Андрей Листочкин (Andrey Listochkin)
@listochkin
May 17 2015 18:20
Я тебе в Раст-канале ответил: May 17 2015 9:18 PM
@hamsternik ^^
Ivan Kurnosov
@zerkms
May 17 2015 20:17
@lividgreen
select возвращает Vec<_>, принимающая сторона становится его владельцем
из-за того, что мы результат вызова select() не присваиваем конкретной переменной
компилятор (и ММ) принимают время жизни этого временного объекта равное текущему стейтменту
т.е. до ;
после которого он считается мёртвым, а итератор поверх него, соответственно, невалидным