@scala_ru

Страница 733 из 1499
Nick
13.06.2017
15:43:43
Future[Future[]] имхо бред

Oleg
13.06.2017
15:43:50
Михаил там какие-то KList ы мутит, Future, похоже просто под руку попался.

Mikhail
13.06.2017
15:46:15
Речь не о том насколько по феншую иметь Future[Future[...]] ( хотя я уже намекнул выше, что в жизни приведу много железобетонных аргументов почему оно не просто жизнеспособно, но и будет появляться пока не будет найдено способа с той же скоростью реализовывать с теми же гарантиями исключительно по феншую)

Google
Diemust
13.06.2017
15:46:56
¯\_(ツ)_/¯

Nick
13.06.2017
15:47:17
Раньше я не понимал Олега, но теперь я не понимаю Михаила)

Oleg
13.06.2017
15:47:33
Nick
13.06.2017
15:47:47
нет, я просто почитал термины, которые ты используешь

ну и котов чутка

Aleksei
13.06.2017
15:48:51
Потому что я не говорю ничего
Это он так на нежность напрашивается.

Mikhail
13.06.2017
15:48:52
это по твоему гавнецо?
говнецо. потому что из этих нескольких строк только одна имеет отношение к бизнес логике - там где мы получаем финальную 5-ку. остальное мусор. мусор в коде - прямая дорога к тормозам (может и не в рантайме, но уж в поддержке и модификации точно)

Diemust
13.06.2017
15:49:40
если убрать мусор (типа ненужный код), то получится Future.succesful(5)

который возвращает Future[Int]

KrivdaTheTriewe
13.06.2017
15:51:01
ну и котов чутка
теперь фп в нейтив занесешь

Nick
13.06.2017
15:51:28
теперь фп в нейтив занесешь
эт врядли, у меня на эт времени нет

Google
Nick
13.06.2017
15:51:34
ток в чатик писать есть)

Mikhail
13.06.2017
15:53:22
Думаю, все ждут хотя бы одного железобетонного аргумента и можно без намёков.
на одной чаше весов - реализация по феншую за N-минут (а если взять джуна или мидла то это будет N * 10), на другой - реализация с Future[Future[ за N/ 10 минут + K-золотых-монеток, которые достаются либо потому что ты успел раньше других бизнесов, либо потому что пока другие делали что-то ты сделал еще 9 пунктиков) Но без конкретных примеров с конкретными цифрами, всем так и будет казаться, что все это абстрактно и надуманно) Пусть так) Как и говорил, цель не в отстаивании позиции Future[Future[ , а просто в самой задачке как заплейнить Футурку одной функцией

KrivdaTheTriewe
13.06.2017
15:53:37
=( какой коннектор для кролика из акки посоветуете ? неужели ньюмун , и вообще это нормально, когда основная фича коннектора это "This small library allows you use RabbitMQ client via Akka Actors. The main idea implemented in library is to survive losing connection with RabbitMQ server"

Mikhail
13.06.2017
15:54:37
если убрать мусор (типа ненужный код), то получится Future.succesful(5)
Если у тебя уже есть Future(Future(Future(5))) , куда ты уберешь весь мусор и как получишь 5-ку одной функцией ?

Diemust
13.06.2017
15:55:03
ну это очень абстрактный вопрос, у меня не будет такого просто ¯\_(ツ)_/¯

я уж тогда сделаю f.get.get =)

Mikhail
13.06.2017
15:55:54
ну это очень абстрактный вопрос, у меня не будет такого просто ¯\_(ツ)_/¯
Такого не будет и бентли не будет. Подумаешь, все относительно. Есть вещи поважнее в этом мире - не спорю)

Nick
13.06.2017
15:56:19
Если у тебя уже есть Future(Future(Future(5))) , куда ты уберешь весь мусор и как получишь 5-ку одной функцией ?
так что не так с for и вариантом, который предложил Олег? по сути первый Future эт тоже бизнес логика

Diemust
13.06.2017
15:57:05
ну вот в том и дело, что если там бизнес логика, то for отлично кладется, а если просто мусор, то и писать можно succesful(5)

Mikhail
13.06.2017
15:58:54
так что не так с for и вариантом, который предложил Олег? по сути первый Future эт тоже бизнес логика
Т.е. ты действительно считаешь, что все ок for { f0 <- f f1 <- f0 r <- f1 } yield r это ок, против flatten(f) ну знаете... эдак мы точно не найдем понимания друг друга)

Diemust
13.06.2017
15:59:33
ну у тебя ж там не просто f так то

Nick
13.06.2017
15:59:34
ну если у тебя есть задача дергать футуры по цепочке, то все ок

KrivdaTheTriewe
13.06.2017
16:00:09
я обыный java api юзаю
а акку ты не используешь?

Nick
13.06.2017
16:00:16
Mikhail
13.06.2017
16:00:29
подожди? а что не так?
def m1 = for { f0 <- f f1 <- f0 r <- f1 } yield r def m2 = for { f0 <- f f1 <- f0 r <- f1 } yield r def m3 = for { f0 <- f f1 <- f0 r <- f1 } yield r Против: def m1 = flatten(f) def m2 = flatten(f) def m3 = flatten(f) Помножь это на 1000... Все так братюнь)

KrivdaTheTriewe
13.06.2017
16:00:56
нет
а что ты от скалы, кроме стд коллекций используешь?

Diemust
13.06.2017
16:00:56
а акку ты не используешь?
мы юзаем newmotion, всё хорошо кроме того, что особо эти акторы под капотом не проконтролируешь и либа не обновляется особо

Google
KrivdaTheTriewe
13.06.2017
16:01:23
скалу
тайпклассы там, имплиситы??

Nick
13.06.2017
16:01:27
иногда

Diemust
13.06.2017
16:02:43
ну да, в декабре, а что контрлировать нужно
размер очереди например. Или что станет с очередью в акторах, если бэкенд умрет. Ну подобные кейсы

много ли там скапливается, может flow-control будет утыкаться в акторы

Nick
13.06.2017
16:03:20
@rudogma я если честно ничего не понял, flatten на future дергает тот же самый flatMap, и то что ты описал в for != просто вызову flatten

Diemust
13.06.2017
16:04:05
если бизнес говорит вызывать по сто раз разные Future(Future(Future(N))), то flatten(N) решает

Nick
13.06.2017
16:04:23
Future от Future бред

Mikhail
13.06.2017
16:05:36
так что не так с for и вариантом, который предложил Олег? по сути первый Future эт тоже бизнес логика
Олег также выше не поленился накидать работающий пример Flatten() с имплиситами) И как в самом начале говорил - плейнить футурки - это просто прикладной пример, все эти паттерны применимы и в других местах

Nick
13.06.2017
16:05:57
можно пример? я просто не вьезжаю где это может пригодится

Oleg
13.06.2017
16:06:03
Футурорн сын Промисорна

Mikhail
13.06.2017
16:06:05
Diemust
13.06.2017
16:06:57
а потом генеришь тип к методу, а он возвращает простыню на пару страниц из вложенных фьюч =)

Mikhail
13.06.2017
16:07:16
можно пример? я просто не вьезжаю где это может пригодится
Цитирую одно из сообщений выше ... а для футурок - растет из прикладной хотелки, когда поднимаю микросервисы в пару строк и мне хочется за пару минут написать несколько строк и запустить в прод без тестов def apimethod(p1, p2, p3) = async(group-to-synchronize){ some code + return somefuture } // что естественно как минимум вернет Future[Future[ и возможно даже еще уровень, но уже гораздо реже конечно ]] это как бы все, что мне требуется для добавление одного микрометода в один микросервис и чтобы быть уверенным, что бизнес-логика синхронизирована относительно определенного положения звезд(комбинации параметров) на небе. просто требования бизнеса - адаптируйся и делай быстрее других или будешь позади)

Nick
13.06.2017
16:07:54
а почему это вернет Future[Future а не просто Future

Mikhail
13.06.2017
16:09:20
а почему это вернет Future[Future а не просто Future
потому что async - синхронизирует по ключу, но не лочит, а шедулит (как если бы ты использовал Актор для синхронизации потока действий), но я не хочу в этом случае заводить аккумонгу

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

Google
Mikhail
13.06.2017
16:11:31
кто тебе мешает делать join на футурах?
лефт или райт, а может иннер? моя твоя не понимать)

Nick
13.06.2017
16:12:36
ну вот Future.sequence не то ли делает, что тебе нужно?

Mikhail
13.06.2017
16:13:14
ну вот Future.sequence не то ли делает, что тебе нужно?
нет конечно) у меня вложенные футурки, а не список футурок)

Nick
13.06.2017
16:13:32
дык зачем тебе они вложенные? я этого не понимаю

Mikhail
13.06.2017
16:14:09
дык зачем тебе они вложенные? я этого не понимаю
потому что я быдлокодер. срыв покровов

Nick
13.06.2017
16:14:18
вот с этого стоило бы начать

@rudogma может быть тебе результат каждого отдельного футура важен?

Mikhail
13.06.2017
16:19:40
@rudogma может быть тебе результат каждого отдельного футура важен?
мне нет. не важен. только пан или пропал (уносите труп, заносите следующего кандидата)

Nick
13.06.2017
16:19:54
тогда эт просто Future)

Mikhail
13.06.2017
16:20:47
тогда эт просто Future)
вот я и делаю из Future[Future[....Future[T]] - просто Future[T]

Alexander
13.06.2017
16:41:47
футурки кстати прекрасно сворачиваются фолдом в одну единственную

Oleg
13.06.2017
16:54:52
ну вот Future.sequence не то ли делает, что тебе нужно?

Alexander
13.06.2017
16:58:57
Future.sequence исполняет независимые футуры паралелльно

Nikolay
13.06.2017
16:59:09
http://www.lihaoyi.com/post/ScalaScriptingGettingto10.html

Nick
13.06.2017
17:11:09
Oleg в общем я ничего все равно не понял)

Alexander
13.06.2017
17:13:54
и дают тебе один Future
и если их много то потери на переключения контекста между потоками исполнения

ну и жрут эти самые потоки естественно

Google
Aleksei
13.06.2017
17:17:15
поэтому надо и юзать monix =)

Alexander
13.06.2017
17:20:43
вот его и сожрут

Nick
13.06.2017
17:21:02
и что? эт страшно?

Alexander
13.06.2017
17:21:13
по ситуации

Grigory
13.06.2017
17:21:27
да номрально все будет если аккуратно делать правильный пул и все

Alexander
13.06.2017
17:21:30
так то полезно чтоб что то свободное оставалось

Nick
13.06.2017
17:21:59
в смысле?

ну ты можешь конечно тред создать и не использовать его))))

Alexander
13.06.2017
17:22:46
хорошо типа как в аккастримах или подоьбном

A
13.06.2017
17:22:47
В смысле? А ты так не делаешь?

Alexander
13.06.2017
17:22:57
выделил сколько надо ивперед

A
13.06.2017
17:23:14
Щас все так делают

Nick
13.06.2017
17:23:33
дык если ты выделишь, то все потоки сожрешь из пула

там ж очередь тасок обычная

Alexander
13.06.2017
17:24:12
нечто вроде mapAsync я имею ввиду

Aleksei
13.06.2017
17:24:14
ну можно же блокинг делать, но я уже не понимаю о чем речь идет

Nick
13.06.2017
17:24:55
ну там наверняка блокинг стратегия используется, но если очередь полная, то переключение контекста эт не проблема

Alexander
13.06.2017
17:25:16
как сказать

допустим у тебя в Future.sequence запросы в бд висят

таким образом пул даже не самое пичальное будет

грустнее пул коннектов к базе

Страница 733 из 1499