Anton
не ну ёто же можно как то сделать более красивым не?
Vladimir
По другому в Токио кодить нельзя.
Vladimir
Ну типа да
Vladimir
Если ты хочешь лениво, и тебе похуй на стейбл
Vladimir
Юзай #[async]/#[await]
Anton
futures-await?
Anton
а
Anton
ну я хз, чот я в нем не особо уверен, да и я не понимаю как тут составлять цепочки из обработчиков
Anton
типо вот у меня несколько кложур в запросе, как их например переместить в функции?
Anton
Или вот например я внутри этой же цепочки тут же хочу сделать еще один запрос
Anton
а не как сейчас - чтобы не запускать эвентлуп дважды
Vladimir
Ну братан, я не юзал асинк авейт, просто знаю что в дефолте Токио, всё выглядит как китайская лапша (может по этому и назвали Токио)
Vladimir
Ну а люди в чате говорили, что им асинк помог
Anton
хмм
Anton
блет ну может это и мысль
Anton
но я даже не понимаю даже как с лапшой норм работать
Anton
как оно вообще внутри устроено понимаю только на уровне принципов работы не более
Anton
а вот по факту по токио вообще информации на донышке
Anton
тоесть ее какбы дохуя
Anton
каждый мамкин хуеплет растоман писал хоть раз у себя в бложике про токио
Vladimir
Хотя у тебя не так уж и много Токио лапши
Anton
но у всех одна и таже хуйня
Vladimir
Разбить всё на модули и будет окей
Vladimir
А что тебе внутри не понятно
Anton
"Смотрите это эвентлуп на токио, сейчас при вас я потыкаю его палочкой - вот вам слегка измененный пример кода с офф экземплов с tcp слушателем, правда охуенно?"
Vladimir
Главная суть токио это фьючеры
Vladimir
Токио лишь, Мио поверх них
Vladimir
А фьючи в свою очередь, представляют отложенные вычисления и метод их композиции в виде функциональной лапши.
Vladimir
Короче ничего сверхразумного
Anton
ну в плане лапши я уже заметил
Anton
я даже не знаю как тип ошибки конечный свой сделать
Anton
ибо если один раз используется один тип ошибок
Anton
он обязан быть до конца
Vladimir
Ну есть map_err
Vladimir
then и тд
Vladimir
Короче, основная причина почему код становится "лапшевидным" это повышение вложенности. Она может быть функциональной, либо структурной. В случае структурной (`if`) большую часть лапши связанную с прочерком ошибок можно убрать, если проверять обратное условие. К примеру: было if let Ok(bla) = some_func() { ...// code } else { process_error() } стало: let bla = match some_func() { Ok(v) => {v}, Err(_) => process_error() } ...// codeв данном случае код стал более "плоским" и читабельным (при условии, если кода довольно много). Но в случае функциональное лапши, у тебя дело с замыканиями, которые просто так не сделаешь плоскими. Но замыкания нужны, так как код фьючерсов может выполняться в другом потоке. Но сделать "цепочечный" код плоским тоже можно, правда требует это больше усилий. Для этого в общем виде необходимо написать свою абстракцию, которая переведет код на цепочечных операторах, в код на enum-ах. (Например) т.е. если у тебя есть код bla.and_then(bla2).and_then(bla3) То, такой код, на самом деле, представим в виде состояний enum States{ Bla, Bla2, Bla3 } с диаграммой переходов Bla -> Bla2 -> Bla3 Декомпозируя каждый из таких паттернов, можно достичь довольно плоского кода. Правда в случае перевода на энамы, количество boilerplate кода увеличится. По этому везде нужно найти свою золотую середину.
Anton
Короче это пиздец и вообще "нахуя ты тапок полез - убьет нахуй"
Anton
Anton
крч я понял
Anton
ну ок буду изучать дальше, авось пригодится
Marat
Tokio это говно говна
Marat
Скорей бы уже async await стабилизировали
Marat
Генераторы*
Ну да, просто если генераторы стабилизируют, то и async await стабилизируется
Vladimir
Не совсем, там ещё процедурные макросы, которых нету
Marat
Не совсем, там ещё процедурные макросы, которых нету
Эээ процедурные макросы же уже стабилизированы, разве нет?
Vladimir
Нет
Vladimir
Только derive
Vladimir
Короче декораторы для структур
Marat
Да я понял, просто думал там что все процедурные макросы стабилизированы
Anton
Крч я оформил ридмишку репы ридера
Anton
Увидел что кто-то даже поставил 3 звезды)
Anton
Осталось изучить лучше проект, найти недочеты, сделать боилерплейт и написать хорошую пасту)
Anonymous
бтв запилил ишью в RFC насчет той ошибки с if let про которую я давно говорил
Anonymous
https://github.com/rust-lang/rfcs/issues/2186
big
чет вообще не понятно о чем речь
Anonymous
во многих лиспах идиоматичнее писать не (λ () (define a b) ...) , а (let (a b) ...) чем я и вдохновился
Loo
а что за проблему решает
Loo
добавление if?
Anonymous
всмысле
Loo
покажи примеры на плэйграунде плз. я не догнал
Loo
@tapok_satan для тебя всё что угодно
Anonymous
реально ли сделать static generic closure?
Anonymous
мда
Filipp
Я не могу читать дальше concat2 ( Как можно было так метод назвать?
Filipp
У меня экзистенциальный кризис от этого метода случается
Vlad
Ну есть concat. Он чето плохой оказался, сделали concat2, чтоб совместимость особо не ломать.
Судзумия
Чую дух PHP
Loo
Чую дух PHP
Это от MySQL joined веет?
Судзумия
Evgen
Чую дух PHP
Значит надо переходить родное близкое... Годно
Evgen
Судзумия
Жду методы concat3, concat_better, concat_the_best, concat_final_version
Loo
там были методы join_one, two
Loo
чото подобное
Loo
сейчас есть join_all который инто итер принимает славу богу