A64m
ну и у макбрайда же еще куча синтаксиса для pure *> <* join
кана
когда-нибудь lens установится
Leonid 🦇
или нет
eahqzsr
Какие вообще практические применения у applicative?
Ilya
Любая монада -- аппликатив
Ilya
Ilya
Так что практические применения такие же, плюс ещё
eahqzsr
Я конечно имел в виду аппликативы не являющиеся монадами
Ilya
Ilya
Validation
http://hackage.haskell.org/package/validation
Ilya
Const
Ilya
ZipList уже упомянутый
Ilya
Хотя я лично придерживаюсь точки зрения, что зиповать правильнее вектора, а вектор уже монада
Ilya
Ilya
Есть эффективная реализация парсерных комбинаторов, которые аппликатив, но не монада
Зигохистоморфный
Ilya
Там грамматика, правда, по моему LL(1)
Зигохистоморфный
моноидальные парсера
Ilya
Моноидальные -- это по моему несколько другое
Ilya
Ilya
Там были именно аппликативные
Ilya
Но почему-то на хаккадже я не нашёл
Ilya
Ilya
Чем вектор так отличается
Ilya
А ссылку можно кстати?
https://github.com/aistrate/Articles/blob/master/Haskell/Deterministic,%20Error-Correcting%20Combinator%20Parsers%20(Swierstra,%20Duponcheel).pdf
Ilya
с листом f может пустой список вернуть
Зигохистоморфный
@ilya_yanok это? http://hackage.haskell.org/package/applicative-parsec
Ilya
Ilya
да, сорри что не уточнил
Ilya
Теперь понятно, спасибо
Cheese
https://hackage.haskell.org/package/regex-applicative
Ilya
eahqzsr
Ilya
Как чего, программ
Евгений
Написания продукта
Евгений
Ну, гм, хаскель быстрее только других языков для прочистки мозгов
Ilya
Быстрое написание быстрых программ
Евгений
eahqzsr
Звучит как раст
Наверное нужно добавить "и чтоб кровь из глаз не шла"
Евгений
Когда уже к расту нормальный синтаксис прикрутят :(
Leonid 🦇
Can't burrow immutably, mutable borrow at this point huita.rs::1488:42
A64m
Евгений
После ML'я-то, конечно, хаскель удобный
Yura
Друзья, есть необходимость ограничить параллелизм. Например, мы слушаем на tcp сокете в accept, на каждый connect делаем forkIO, но хочется ограничить возможность спавнить нити.
Причём лучше без каналов.
Aleksei (astynax)
ref со счётчиком?
Cheese
-N спасёт?
Aleksei (astynax)
Я так понимаю, что нужен некий пул
Cheese
или нужна критическая секция?
Yura
пулы насколько я понимаю сделаны на каналах
Yura
forkIO на каждый connect работает норм даже на высоких нагрузуках, но тут соединение прибивается по таймауту, если клиент не прибил
Yura
я вот думаю https://lwn.net/Articles/542629/ REUSEPORT использовать или что-то самому накрутить
Leonid 🦇
@drcha0s http://hackage.haskell.org/package/async-pool-0.9.0.2/docs/Control-Concurrent-Async-Pool.html
Yura
Page not found
Yura
:)
Yura
но я поня
Leonid 🦇
починил
Vladimir
посмотрите на rate-limit
или ему подобные на hackage
а reuseport это больше для
балансировки нагрузки,
зачем здесь - непонятно
Aleksei (astynax)
Yura
Leonid 🦇
forkIO же дешевый совсем совсем. Или тебя смущают другие ресурсы?
Leonid 🦇
сразу после форка пусть тред ждёт на семафоре и всё. Правда я не уверен что хаскельный семафор будит треды в том порядке в котором они в вейт встали
Leonid 🦇
т.е. будут некоторые треды которые хоть и встали в вейт раньше но получат тикет позже
Vladimir
тут пул воркеров напрашивается, если форк
для вас такой дорогой
Cheese
Leonid 🦇
Ааа, лол
Leonid 🦇
Так там слишком много в TIMED_WAIT остаётся? Или нужно просто limit поднять?
Yura
Yura
recurcive DNS он уже работает для UDP, сейчас туда добавляется TCP и TLS
Yura
так вот сразу закрывать TCP и TLS не получается и надо ждать десятки секунд если клиент не закрыл соединение
Alexander
Yura
Andrew
Фух. В чате про кресты пропагандировал Haskell как мог 😅
Alexander