blkmrkt
делаешь что-то не так
я имею ввиду что в утилитах написанных на лисп/хаске такое часто встречается
blkmrkt
в каком именно лиспе?
вот тут хрен знает какой https://github.com/dimitri/pgloader
Misha
пользовался один раз в жизни этим pgloaderом, и проблема была ровно такая же, он безумно прожоливый
blkmrkt
еще другой инструмент пробовал для загонки мяса в бд, тоже на лиспе, и тоже с heap overflow встречался при большом количестве кусков данных в настройке инструмента
aodzaki.toko
хм... странно, а чего в issue пишут?
blkmrkt
хм... странно, а чего в issue пишут?
скомпилировать другим тулчейном, но не всем помогает
aodzaki.toko
хм. а чем ты комплишь? sbcl?
blkmrkt
пользовался один раз в жизни этим pgloaderом, и проблема была ровно такая же, он безумно прожоливый
chunk size сделал 100 вместо 25000, вот почти неделю заливается. Я сам написал говнокод на go с chunk size 25000, и та же беда точно произошла
blkmrkt
хм. а чем ты комплишь? sbcl?
я готовый бинарник взял из apt, там не ccl
aodzaki.toko
а сама либа вызывает рекурсию или ты?
aodzaki.toko
тогда вопрос к тебе
blkmrkt
я сам рекурсию делаю
тьфу, я имел ввиду мой говнокод. А в pgloader конечно где-то рекурсия есть
aodzaki.toko
ты делаешь рекурсивный вызов
aodzaki.toko
кусок кода кинь в лс
aodzaki.toko
тут типа не про лисп группа
blkmrkt
не, я на лиспе не пишу, просто мне показалось что часто в лисповых инструментах встречаю баги с heap overflow
aodzaki.toko
эм.... мне кажется, что это надуманное мнение...
blkmrkt
в хаскеле та же беда была когда сам кодил, но научился не тащить за собой тяжелые вещи внутри рекурсии и не-thread-safe типы внутрь воркеров
Vladislav
в хаскеле та же беда была когда сам кодил, но научился не тащить за собой тяжелые вещи внутри рекурсии и не-thread-safe типы внутрь воркеров
надо стараться по максимуму все превращать в хвостовую рекурсию, тогда проблем со стеком не будет
aodzaki.toko
тред-сейв и рекурсия .... ммммммм...... ммммммм.....
aodzaki.toko
просто рекурсию в тейл позишн и все
blkmrkt
хм, почитаю сейчас
aodzaki.toko
мне кажется, что у тебя нет четкого представления о теме. тред-сейф ближе к конкаренси. а рекурсия - это рекурсия. а то что у тебя одно через другое - не является проблемой либы или языка.
aodzaki.toko
бывает
blkmrkt
http://learnyouahaskell.com/recursion
не, хотелось бы почитать о том как оно устроено under the hood
aodzaki.toko
https://github.com/ghc/ghc
aodzaki.toko
не, хотелось бы почитать о том как оно устроено under the hood
👆 выше ссылка на компилятор. читай на здоровье
blkmrkt
супер 😂
Anonymous
Так ли нужны хвостовые рекурсии? Имплементирована ли в GHC TCO –– я очень сомневаюсь. Вики говорит (и я всегда думал), что нужно писать guarded рекурсии: https://wiki.haskell.org/Tail_recursion#Tail_call_optimisation
Anonymous
я же правильно понимаю, что если (в любом ЯП) включить TCO, то в случае чего по стектрейсу ничего не понятно будет?
Anonymous
так вот нет наверно смысла включать её глобально
Anonymous
всё-таки быстро исправлять баги важнее, чем иметь не всегда нужные микрооптимизации
Anonymous
к тому же хаскель и так достаточно быстрый
Serghei
я тут провел 4 увлекательных дня с gdb. так, прям с 8 утра, и до 3ночи. C-89. неизгладимое впечатление. я люблю хаскел
Vladislav
к тому же хаскель и так достаточно быстрый
TCO помогает не с performance, а с излишним использованием стека
blkmrkt
Подскажите, из каких модулей проще слепить реверс-HTTP-прокси-сервер? Суть вкратце: слушаем коннекты на определенном порту, и для каждого клиента перекидываем его реквест через какой-нибудь прокси-сервер из пула серверов.
Vladislav
из nginx'а?
blkmrkt
из nginx'а?
не, кодом нужно будет хандлить мертвые прокси, добавление новых, аутентификацию и прочее
blkmrkt
можно несколько примеров?
вот я опенсос проектов таких еще не видел
Alexander
не видел, но часто случается, ок
Alexander
прокси из network-conduit в 3 строки
Alexander
оно у них прямо в хаддоках написано, но лучше nginx :)
blkmrkt
просто у меня есть пауки, и хочу отстегнуть логику прокси от перемешивания и хранения массы прокси-серверов. Просто хочу поднять один прокси сервер и направлять всех пауков туда
blkmrkt
в среде блеквованов это называется backconnect proxy
Vladislav
не, кодом нужно будет хандлить мертвые прокси, добавление новых, аутентификацию и прочее
тогда в сторону http://hackage.haskell.org/package/warp можно посмотреть, думаю
Alexander
я бы не таскал хттп на последнем уровне
Alexander
а там уже все что угодно можно делать
blkmrkt
тогда в сторону http://hackage.haskell.org/package/warp можно посмотреть, думаю
угу спсибо, я с ним и собрался делать. А как лучше реализовать персистенси данных? Писать свой сериализатор на диск/с диска, или может есть готовый пакет?
blkmrkt
не хочется ради этого редис подключать
Alexander
lmdb, leveldb, vault, какая там наивная база была? да хоть memmapped файл
Alexander
вопрос в требованиях
Vladislav
rocksdb, опять же
blkmrkt
lmdb, leveldb, vault, какая там наивная база была? да хоть memmapped файл
оу спасибо, слышал эти слова раньше, теперь знаю
blkmrkt
А вообще хаскель это правильный инструмент для реализации backconnect proxy сервиса? Задача - держать сотню тысяч коннектов и гонять данные туда-сюда.
blkmrkt
а у тебя есть сотня тысяч проксей? )
неа, но 1 прокси можно бомбить более чем 1 одновременным реквестом
blkmrkt
why not?
слышал что памяти много ест еще вот бенчмарк нашел http://eric.themoritzfamily.com/websocket-demo-results-v2.html
Alexander
нормально вполне
blkmrkt
go очень неплох
Alexander
используй го, если умеешь но и не умеешь haskell
Alexander
но если вопрос про жрет памяти, то го не факт что должен рассматриваться, у них latency oriented gc
Vladislav
слышал что памяти много ест еще вот бенчмарк нашел http://eric.themoritzfamily.com/websocket-demo-results-v2.html
если хочется высокой эффективности по cpu/памяти, бери c (или c++)
Alexander
который принципиально не может быть ограничен по памяти
blkmrkt
ну сделаю пока на хаскеле, и пока не сломается трогать не буду
Quet
но если вопрос про жрет памяти, то го не факт что должен рассматриваться, у них latency oriented gc
нене, вот именно на этой задаче их коллектор не будет проблемой