@haskellru

Страница 1416 из 1551
Alexander
18.08.2018
17:54:52
вообще async $ trySome action >>= atomically . writeTMVar responseBox

где trySome :: IO a -> IO ( Either SomeException a)

а responseBox :: TMVar (Either SomeException a)

в вызывающем треде either throwM pure =<< atomically (takeTMVar response)

Google
Alexander
18.08.2018
17:56:30
@termina1 ^

Vyacheslav
18.08.2018
18:29:04
на сколько параллельно должно быть, зачем там async?
Там может быть несколько последовательных запросов внутри, так что нужен

Alexander
18.08.2018
18:29:33
ну не важно, то что выше все равно сработает

смысл делаешь trySome в рабочем процессе результат отдаешь

в получателе при чтении делаешь either throwM pure

можно в внутрь своих методов запихать

Vyacheslav
18.08.2018
18:30:34
Ок, спасибо, попробую разобраться.

Alexander
18.08.2018
18:58:35
имхо если нужно что то откладывать на значимое время в серверном ПО лучше это делать через редис / любое другое персистентное хранилище

Terminator
18.08.2018
21:50:50
@MikhailSubbotin будет жить. Поприветствуем!

Vyacheslav
19.08.2018
10:30:55
на самом деле кажется мне просто нужна функия link

и в целом мой паттерн, когда мне нужно стартануть асинк, результат которого в этом треде меня не интересует, но я хочу привязать асинк к текущему треду (чтобы он пропагейтил эксепшены и убивал асинк, если тред помер) выражается как-то так withAsync action $ \a -> link a

если я ничего не перепутал

Google
Kirill
19.08.2018
10:45:18
@termina1 а остальные действия треда у тебя внутри withAsync?

иначе у тебяж после линка этот асинк убъётся

может всёж действия можно как-то выразить через concurrently? Чтоб предсказуемое время жизни было?

Vyacheslav
19.08.2018
10:47:54
да хотелось бы, но придется очень много переписывать

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

как я понимаю, если main-тред умрет, то все остальное помрет само

Kirill
19.08.2018
10:55:19
с т.зр. логики имхо лучше поставить wait на выходе main-потока

если нужно конечно иметь инфу об исключении

а не просто валиться без логов даж

ну и таймаутом, если оно потенциально может жить дольше

Alexander
19.08.2018
10:58:02
тебе или нужно треду вызывающему отдавать async или то что я написал

Vyacheslav
19.08.2018
10:59:17
botLoop :: LogIO m => ConduitChannel -> BrainCells -> m () botLoop chan cells = do (event, pushback) <- liftIO $ readChan chan act <- liftIO $ async (do response <- processRequest cells event writeChan pushback response) liftIO $ link act botLoop chan cells

Alexander
19.08.2018
10:59:23
отдай тому треду, которого интересует Async и он все сделает

Vyacheslav
19.08.2018
10:59:50
чем такой вариант плох?

Alexander
19.08.2018
11:00:02
переусложненный

но если работает то хорошо

link +1 тред форкает

waitCatch тоже поймает

Kirill
19.08.2018
11:02:18
но он ждать будет

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

Google
Kirill
19.08.2018
11:04:06
обычно логично иметь "пул" обработчиков

Vyacheslav
19.08.2018
11:08:12
Замечание разумное, но в моем случае неактуальное

Alexander
19.08.2018
11:08:40
ну получается тут привязка ко всем асинкам что когда либо запускал

для меня такое поведение странное

в треде который создаёт другие рабочие треды

а стоп, понял

я что-то в другую сторону про исключения думал

да, так все нормально

Kirill
19.08.2018
11:11:05
@qnikst а в "другую сторону" - это слать из основного в обработчики чтоль?

Alexander
19.08.2018
11:11:21
ну тут это делается

если основной сдох, то и обработчики

или я как всегда запутался в линках

Vyacheslav
19.08.2018
11:13:33
но так как создаваемые мной треды живут очень мало, то и линки умирают достаточно быстро

A64m
19.08.2018
18:34:46
тем временем стекедж-лтс опять сломан на виндовс In the dependencies for turtle-1.5.10: Win32-2.6.1.0 from stack configuration does not match >=2.2.0.1 && <2.6 (latest matching version is 2.5.4.1)

кто тут недавно говорил, что стек на виндовс работает?

Александр
19.08.2018
19:37:32
Спасибо, мне как раз по работе надо знать, что там с совместимостью

Kirill
19.08.2018
19:48:41
@A64m_qb0 а откуда такая версия взялась? 2.5.4.1 последняя версия в стакане

A64m
19.08.2018
19:49:19
c 8.4.3 видимо

(актуальная вообще 2.8 или вроде того)

Google
Kirill
19.08.2018
19:51:50
а в 2.6.0 "Make cabal error out on compilation on non-Windows OSes."

наверное в этом дело

Admin
ERROR: S client not available

A64m
19.08.2018
19:53:38
в 10 lts был точно такой-же баг с туртлом, я прямо старый багрепорт откопировал, только версии в нем поменял

просто стекедж никто не собирает на виндовс

Kirill
19.08.2018
19:56:06
и Win32 в нём нет

A64m
19.08.2018
20:00:35
не совсем. на стековой странице в списке не посмотреть, да

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

Kirill
19.08.2018
20:03:28
ну идущие с ghc идут как дефолтный набор, на который снэпшот натягивается, да

Terminator
19.08.2018
21:24:33
@exremi будет жить. Поприветствуем!

A64m
20.08.2018
08:45:48
тем временем комитетчики начали было бодро обсуждать отклонение древнего пропозала, который имплементирован в 8.2

но эйзенберг немного их пыл остудил

смешно, конечно, что primitive, становясь из библиотеки для авторов библиотек более рассчитанной на простого программиста, библиотекой массивов повторил дизайн vector с сортировкой в отдельном пакете.

ну, понятно же, кому может понадобится сортировка? конечно она не должна в основном пакете быть, как и какое-нибудь FFT

Imants
20.08.2018
10:15:08
сортировать же можно по разному..

Oleg
20.08.2018
10:18:51
И в большинстве случаев всем плевать, как

Главное, чтобы быстро, и по возможности stable

Alexander
20.08.2018
10:27:31
угу

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

? animufag ?
20.08.2018
10:28:47
а можно как-нибудь получать нотификации об изменении в STM? (точнее блочить тред в IO пока в TVar что-нибудь не изменится)

Google
? animufag ?
20.08.2018
10:29:05
подозреваю что придётся MVar сделать

Kirill
20.08.2018
10:42:29
а http://hackage.haskell.org/package/stm-2.4.5.0/docs/Control-Monad-STM.html#v:check не хватит?

? animufag ?
20.08.2018
10:48:58
добавляются элементы в мапу

Alexander
20.08.2018
10:49:18
просто можно сделать: join $ atomically $ do original <- readTVar x pure $ check (original ==) =<< readTVar x

после check .

но он каждый раз при изменении мапы будет сравнивать не с предыдущей версией

проще обернуть API для сохранения

? animufag ?
20.08.2018
10:51:11
наверное он не глупый и проверяет только при наличии изменений?

Alexander
20.08.2018
10:52:01
да

ну insert 1 2 £ insert 1 2 - возможно проснется

Страница 1416 из 1551