A64m
_JSON :: [Int]
A64m
ну или другой тип, идея, думаю, понятна
Alexander
понял
Kakadu
Народ, а как в хаскелле получить надпись stackoverflow ? А то мои нехвосторекурсивные функции просто память жрут
Andrey
никак, это волшебный язык )
Kakadu
я их стэком компилирую
Kirill
никлас вродеж когда-то не очень давно уговорил саймона сделать анлим стэк
Kirill
так что проще heap overflow словить
Alexander
+RTS -K1m ?
A64m
Alexander
мне казалось сейчас лимитированный но большой
A64m
да
A64m
только лимит динамический
A64m
80% или вроде того от объема памяти (только вот какой - не помню)
Alexander
-K ⟨size⟩
Default: 80% of physical memory
Set the maximum stack size for an individual thread to ⟨size⟩ bytes. If the thread attempts to exceed this limit, it will be sent the StackOverflow exception. The limit can be disabled entirely by specifying a size of zero.
This option is there mainly to stop the program eating up all the available memory in the machine if it gets into an infinite loop.
Alexander
офигеть я даже флаг правильно вспомнил
Kakadu
А этот ман где смотреть?
Kakadu
А вообще на таких программах корректноэто пытаться поймать?
mysum = foldr (+) 0
main = print (mysum [1..1000000])
Alexander
Alexander
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/index.html#
Alexander
[qnikst@nixos:~]$ cat 1.hs
mysum = foldr (+) 0
main = print (mysum [1..10000000])
[qnikst@nixos:~]$ ghc -O0 -rtsopts 1.hs
[1 of 1] Compiling Main ( 1.hs, 1.o )
Linking 1 ...
[qnikst@nixos:~]$ ./1 +RTS -K1m
1: Stack space overflow: current size 33624 bytes.
1: Use `+RTS -Ksize -RTS' to increase it.
Alexander
как в ghci/runhaskell задать - не знаю
Kakadu
Сейчас получается что если суммировать от 1 до миллиона, то рубеж размера стека где-то между 30 и 40М и не зависит foldl или foldr
Kakadu
Я не хочу пока лезть в foldl', хочу пример где хвостовая важна. Где его искать?
Kakadu
буду фибоначчи тестить лучше
Kakadu
Не, плохой пример. мгновенно работает
Anonymous
Здравствуйте.Какую книгу почитать для начала по Haskell?
Зигохистоморфный
Aleksei (astynax)
Aleksei (astynax)
Есть расход памяти на thunks с ленивыми суммами
Aleksei (astynax)
Если написать на foldl', то "стека хватит" :)
Cheese
Alexander
Alexander
но если нужно столько стека процессу, то это странно
Cheese
Alexander
ничего не понял
Alexander
компиляция врятли стек ест
Alexander
там скорее надо будет хип ограничивать..
Alexander
@cblp_su или я не понял твоего комментария?
Cheese
нет, я это я перепутал стэк с хипом
Alexander
Alexander
а ок
Cheese
у товарища проблема с памятью, а не со стэком, по-моему
Aleksei (astynax)
и он думает, что проблема со стеком
Alexander
в общем неудачный foldr как раз на stackoverflow помрёт
Cheese
Spock для работы с формами использует какие-то digestive-functors, которые, кажется, очень плохо поддерживаются
Cheese
у Servant есть представление для HTML-форм?
Alexander
а что такое представление для форм?
Alexander
там есть servant-blaze который может выдавать html, из всего у чего есть ToMarkup
Alexander
я не уверен, что из типа данных он может сгенерить форму
Alexander
у нас используется swagger, который по API геренирует интерфейс с формами
Alexander
но это не для пользователя интерфейс
Cheese
Cheese
и функции его декодирования из запроса
Cheese
Alexander
есть servant-multipart для multipart-formdata
Alexander
есть тестирование и администрирование
Cheese
Alexander
для urlencoded формы не знаю, поидее оно же через обычный url пойдет, и надо там комбинировать
Kakadu
А на каком примере можно видеть, что хвостовая важна?
Alexander
forever f = f » forever f ?
Kakadu
А чтоб без монад?
Alexander
в haskell хвостовая рекурсия не настолько интересна в силу ленивости
Aleksei (astynax)
fix же
Aleksei (astynax)
или iterate
Aleksei (astynax)
Так. Туплю. Обе не хвостовые :)
Alexander
fix - вообще хитрый
Cheese
а зачем доказывать важность TCO? не важна она. просто есть два стула — можно в язык добавлять особый синтаксис для циклов, а можно просто TCO
A64m
ну нет
A64m
фп код писать без нормальной tco проблематично
Cheese
да с TCO всё проще. а если нужна явная форма цикла, она пишется как функция
A64m
да не только "форма цикла" нужна, нужно чтоб взаимнорекурсивные функции нормально оптимизировались
A64m
иначе никаких комбинаторных парсеров и т.д.
Cheese
Anonymous
@d37284 будет жить. Поприветствуем!
Anonymous
@sukhmel будет жить. Поприветствуем!
Alexander
@chshersh прикольный логгер, точнее то, что база без лишнего и можно на его основе нормальный сделать.
Вообще в логгере нужно примерно как в di, иметь структуру, стек [path_or_context]
Alexander
т.е. память, processid, threadid на самом деле почти никогда не нужно, а когда нужно можно добавлять через context