Kirill
может всёж действия можно как-то выразить через concurrently? Чтоб предсказуемое время жизни было?
Viacheslav
да хотелось бы, но придется очень много переписывать
Viacheslav
на самом деле в примере, который я привел, мне достаточно просто link  — потому что я их запускаю на основном треде, и нужен только эксепшены переьрасывать в него оттуда
Viacheslav
как я понимаю, если main-тред умрет, то все остальное помрет само
Kirill
с т.зр. логики имхо лучше поставить wait на выходе main-потока
Kirill
если нужно конечно иметь инфу об исключении
Kirill
а не просто валиться без логов даж
Kirill
ну и таймаутом, если оно потенциально может жить дольше
Alexander
тебе или нужно треду вызывающему отдавать async или то что я написал
Viacheslav
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
отдай тому треду, которого интересует Async и он все сделает
Viacheslav
чем такой вариант плох?
Alexander
переусложненный
Alexander
но если работает то хорошо
Alexander
link +1 тред форкает
Alexander
waitCatch тоже поймает
Kirill
но он ждать будет
Kirill
вопрос корректно ли тут плодить потенциально мильон потоков если в канал могут быстро писать
Kirill
обычно логично иметь "пул" обработчиков
Viacheslav
Замечание разумное, но в моем случае неактуальное
Alexander
ну получается тут привязка ко всем асинкам что когда либо запускал
Alexander
для меня такое поведение странное
Alexander
в треде который создаёт другие рабочие треды
Alexander
а стоп, понял
Alexander
я что-то в другую сторону про исключения думал
Alexander
да, так все нормально
Kirill
@qnikst а в "другую сторону" - это слать из основного в обработчики чтоль?
Alexander
ну тут это делается
Alexander
если основной сдох, то и обработчики
Alexander
или я как всегда запутался в линках
Viacheslav
но так как создаваемые мной треды живут очень мало, то и линки умирают достаточно быстро
A64m
тем временем стекедж-лтс опять сломан на виндовс 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)
A64m
кто тут недавно говорил, что стек на виндовс работает?
Alexander
Спасибо, мне как раз по работе надо знать, что там с совместимостью
Kirill
@A64m_qb0 а откуда такая версия взялась? 2.5.4.1 последняя версия в стакане
A64m
c 8.4.3 видимо
A64m
(актуальная вообще 2.8 или вроде того)
Kirill
а в 2.6.0 "Make cabal error out on compilation on non-Windows OSes."
Kirill
наверное в этом дело
A64m
в 10 lts был точно такой-же баг с туртлом, я прямо старый багрепорт откопировал, только версии в нем поменял
A64m
просто стекедж никто не собирает на виндовс
Kirill
и Win32 в нём нет
A64m
не совсем. на стековой странице в списке не посмотреть, да
A64m
но идущие с гхц библиотеки в нем как-бы есть (список от платформы зависит)
Kirill
ну идущие с ghc идут как дефолтный набор, на который снэпшот натягивается, да
Anonymous
@exremi будет жить. Поприветствуем!
A64m
тем временем комитетчики начали было бодро обсуждать отклонение древнего пропозала, который имплементирован в 8.2
A64m
но эйзенберг немного их пыл остудил
A64m
смешно, конечно, что primitive, становясь из библиотеки для авторов библиотек более рассчитанной на простого программиста, библиотекой массивов повторил дизайн vector с сортировкой в отдельном пакете.
A64m
ну, понятно же, кому может понадобится сортировка? конечно она не должна в основном пакете быть, как и какое-нибудь FFT
Anonymous
сортировать же можно по разному..
Oleg
И в большинстве случаев всем плевать, как
Oleg
Главное, чтобы быстро, и по возможности stable
Alexander
угу
Alexander
нужна в меру хорошая сортировка на данных без особого распределения
Влод
а можно как-нибудь получать нотификации об изменении в STM? (точнее блочить тред в IO пока в TVar что-нибудь не изменится)
Влод
подозреваю что придётся MVar сделать
Kirill
а http://hackage.haskell.org/package/stm-2.4.5.0/docs/Control-Monad-STM.html#v:check не хватит?
Влод
добавляются элементы в мапу
Alexander
просто можно сделать: join $ atomically $ do original <- readTVar x pure $ check (original ==) =<< readTVar x
Alexander
после check .
Alexander
но он каждый раз при изменении мапы будет сравнивать не с предыдущей версией
Alexander
проще обернуть API для сохранения
Влод
наверное он не глупый и проверяет только при наличии изменений?
Alexander
да
Alexander
ну insert 1 2 £ insert 1 2 - возможно проснется
Alexander
зависит от реализации тот же указатель выдаст или не тот же если структура не меняется
Влод
просто можно сделать: join $ atomically $ do original <- readTVar x pure $ check (original ==) =<< readTVar x
только там обычный бул принимается без монады так что прежнее значение нужно получить до этого блока atomically
Alexander
дык мой код смотри, он получает
Alexander
и возвращает IO ()
Alexander
который сравнивает с оригиналом
Alexander
для этого join
Alexander
чтобы сразу внутренний блок запуститть
Alexander
pure $ atomically $ check..
кана
огогого
кана
только я сказал про свою мухосрань, как в Витебске появилась вакансия на хаскелиста
кана
ну хотя там сложно как-то, в ссылке витебск, а в описании питер