Маjко
Понятно
Dårk
Сложно
это всё тот же я :)
Dårk
всё же WORKMODE в telegram desktop не тащит
Dårk
а вот два аккаунта — это тема.
Anton
Как бы понять, куда эти лайфтаймы пихать. Допустим вот это понятно: fn testing<'a>(world: &'a mut World), но что тогда в возвращаемое значение?
Маjко
Я к сожалению, не работал с await) Могу только сказать, что возвращаемое — фьюча с баундом по 'a
Anton
Эх, ладно, буду дальше ковырять
Anton
Надеюсь, это сделают удобным в ближайшем времени)
Anton
Тогда можно будет начать что-нибудь интересное на расте писать)
Loo
https://github.com/alexcrichton/futures-await#borrowing
Anton
Понятно
Anton
Придётся подождать
Loo
чего ждать то
Anton
Когда доделают, будет киллер-фича
Loo
юзай овнед
Anton
Смысл пропадает
Loo
хуячь Arc или юзай овнед
Anton
Суть была в том, чтобы от них избавиться и статически проверять
Anton
На этапе компиляции
Маjко
Статически можно проверить, что всё, что создано после создания event-loop дропнется раньше, чем event-loop
Маjко
Смысл от такого боровинга?
Маjко
Ну ок, ты сможешь запихать туда пару объектов, которые ты создал в мейне перед Tokio Core
Маjко
Дальше то?)
Anton
Так нет, разграничивать фазы уже внутри event-loop
Anton
По идее заимствование должно сохраняться на границе yield'ов
Anton
Функция, на которую ругается, выглядит так: #[async] fn testing(world: &mut World) -> Result<(), ()> { await!(increasing(world)); await!(decreasing(world)); Ok(()) }
Я этот пример как раз написал, чтобы проверить, что ссылка нормально борроуится сначала в первую асинхронную функцию, а потом во вторую
Anton
Без всяких Arc
Vladimir
Сейчас возможно открою тайну, но все эти оптимизации типа "анбоксед кложур" "ссылок вместо арков" на самом деле, в реальном коде не показывают никакого прироста(
Vladimir
А генераторы да, непонятно почему без лайфтаймов, видимо чтобы не выводить в каждом варианте енама его лайфтайм
Vladimir
А чем чище?
Vladimir
&'a Bla против Rc<Bla>
Vladimir
Сомнительная чистота...
Vladimir
Передавай овнед по возможности
Vladimir
Фьючи и так приносят слишком много еботни, чтобы по этому поводу ещё париться
Anton
Да я ещё ничего на расте не написал) Просто проверяю его на пригодность
Vladimir
Пригоден
Vladimir
👍
Vladimir
Маjко
Anton
Ну без async/await уже не чище)
Vladimir
Эхх, Найтли...
Anton
И явные лайфтаймы, конечно, тоже
Маjко
Эхх, Найтли...
Это и на стейбле можно сделать, мне в падлу конкретный тип писать просто
Маjко
Хотя он тут простой, всего лишь FutureResult
Vladimir
Та я про них и говорю
Vladimir
Сегодня переписывал комбинаторы на стейт машину
Vladimir
70 против 180 строк
Vladimir
И ебля с типами
Vladimir
Хотя с типами не самая большая ебля
Vladimir
Больше с отсутствием асинк авейта
Маjко
И явные лайфтаймы, конечно, тоже
Без них невозможно сказать, что фьюча не переживет заимствованные данные
Vladimir
И необходимостью пробрасывать ошибку
Маjко
Оппаа
Маjко
ICE
Маjко
Забавно
Vladimir
Без них невозможно сказать, что фьюча не переживет заимствованные данные
Кстати если написать свои структуры то можно убрать поидее лайфтаймы
Anton
https://play.rust-lang.org/?gist=eb8bb7167037dd7b182700ca8673e5ba&version=nightly
Хмм. А как вот такую функцию переписать на future? #[async] fn increasing(world: &mut World) -> Result<(), ()> { while world.val <= 10 { world.val = world.val + 1; await!(()); } Ok(()) }
Маjко
Я не уверен, что понимаю правильно тут семантику цикла
Маjко
Он асинхронный?
Vladimir
ну это разве не стрим?
Anton
Да, увеличиваем значение на единицу и отдаём управление event-loop'у
Маjко
Хотя не, там же условие зависит от данных
Маjко
https://play.rust-lang.org/?version=nightly&mode=debug
Маjко
ICE
Vladimir
ты ссылку не на код кинул
Маjко
Упс
Маjко
Ща
Маjко
Issue сделаю и кину
Маjко
https://github.com/rust-lang/rust/issues/45437
Vladimir
Anton https://play.rust-lang.org/?gist=93f80e4f6a9061752765c41fd05b5b80&version=nightly как-то так на вскидку
Anton
Хмм
Vladimir
Anton https://play.rust-lang.org/?gist=f5e92af455044dfb3f00d64f3ab2888b&version=nightly да, работает
Anton
Ага, вроде то, что надо
Anton
Вот хочется такого же на await'ах)
Маjко
Маjко
К вопросу о том почему его не выпускают из nightly
Vladimir
Ага, вроде то, что надо
Но по факту толку мало в этом, ведь засунь ты в пул этот фьюч и он потребует Статик лайфтайма
Vladimir
(наверное)