Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Nov 10 2020 10:34
    cblp commented #110
  • Nov 10 2020 10:33
    cblp commented #110
  • Nov 10 2020 10:33

    cblp on gh-pages

    Update 2017-04-06-react-flux-gu… (compare)

  • Nov 10 2020 10:29

    cblp on react-flux-talk-timecode-fix

    (compare)

  • Nov 10 2020 10:29

    cblp on master

    Update 2017-04-06-react-flux-gu… (compare)

  • Nov 10 2020 10:29
    cblp closed #110
  • Nov 10 2020 09:34
    astynax opened #110
  • Nov 10 2020 09:34

    astynax on react-flux-talk-timecode-fix

    Update 2017-04-06-react-flux-gu… (compare)

  • Aug 17 2020 16:00

    cblp on master

    Revert @ruhaskell (compare)

  • Aug 17 2020 12:49

    cblp on master

    Add @ruhaskell (compare)

  • Nov 23 2019 14:39
    cblp closed #92
  • Nov 23 2019 14:39
    cblp commented #92
  • Nov 23 2019 14:39
    cblp commented #109
  • Nov 23 2019 14:38

    cblp on gh-pages

    Update link (#109) https://has… (compare)

  • Nov 23 2019 14:37

    cblp on qnikst-patch-1

    (compare)

  • Nov 23 2019 14:37

    cblp on master

    Update link (#109) https://has… (compare)

  • Nov 23 2019 14:37
    cblp closed #109
  • Nov 22 2019 20:25
    qnikst review_requested #109
  • Nov 22 2019 20:25
    qnikst opened #109
  • Nov 22 2019 20:24

    qnikst on qnikst-patch-1

    Update link https://haskell-la… (compare)

klapaucius
@klapaucius
ну и 256 мегов это дофига
Gleb Popov
@arrowd
Ды вот уже редьюснул до одного этого флага и все равно.
klapaucius
@klapaucius
это где-то 256мб*2*N + K памяти нужно, что может быть неприятно
Gleb Popov
@arrowd
Ну с этим поиграться можно будет. У меня сработало и оказалось еще быстрее чем -A128m.
Но до этого я передавал через +RTS, а сейчас хочу зашить дефолт в програмульку.
Даже в +RTS --info этот флаг присутствует, но на него же он и ругается. Загадочно.
klapaucius
@klapaucius
а гхц-то с -rtsopts собирает?
Gleb Popov
@arrowd
Так точно.
klapaucius
@klapaucius
а, хотя он и не должен на виз ртсоптс влиять-то
Gleb Popov
@arrowd
Ну сам -A требует чтобы программа была линкнута с -rtsopts, поэтому имеет смысл этот флаг оставить.
А на уровне исходного кода существуют ли прагмы для управления ГЦ? Например взять и сказать, что внутри моего doWork вообще ничего не собирать, пока эта функция не завершит работу.
klapaucius
@klapaucius
ну виз ртсоптс это альтернатива ртсоптс для тех кто хочет свои настройки поставить а пользователю их не давать менять, так что для первого второй не требуется
нет, не существует
Gleb Popov
@arrowd
А, вот оно че. Кавычки verbatim перекочевали в программу.
Gleb Popov
@arrowd
Погонял тесты. -A64m -AL256m не дает такого прироста как просто -A256m.
А вот -qn4 дало дополнительный прирост.
Gleb Popov
@arrowd
Читали ковайниковский журнал? Не могу ничего сказать по поводу контента, но оформление необычное и интересное.
Gleb Popov
@arrowd
Вот интересно, когда QuickCheck находит тест, в котором assert не выполняется, он печатает инпуты, чтобы можно было воспроизвести. А у меня тест с IO, и моя функция эксепшн бросает. В этом случае квикчек нифига инпуты не печатает.
Yuriy Syrovetskiy
@cblp
проверил, всё печатает
> quickCheck $ \x -> ioProperty $ when (x > 10) $ throwIO $ userError "hello"
*** Failed! Exception: 'user error (hello)' (after 15 tests and 1 shrink):
11
Gleb Popov
@arrowd
Гм. Ладно, на самом деле я использую hspec, а внутри - квикчек, причем не property, а monadicIO. Может в этом дело.
Gleb Popov
@arrowd
Слушайте хохму. Я использовал take n <$> shuffleM list чтобы извлекать n произвольных элементов из list. Здесь shuffleM - из Олеговского пакета random-shuffle. Ну и в какой-то момент я решил что сортировать весь список, ради того чтобы пару элементов оттуда достать - не комильфо. Переписал по-своему, и это работает настолько долго, что моя программулька теперь даже не завершается.
Я и раньше уже ощущал, что я неважнецкий погромист, но сейчас я просто размазан.
unclechu
@unclechu:matrix.org
[m]
@arrowd: а что ты там такого понаписал? в чём основная идея была?
Gleb Popov
@arrowd
  • считаю length list
  • генерю n индексов в промежутке [0;n)
  • объединяю индексы в список indices, сортирую
  • иду по обоим спискам со счетчиком, и когда счетчик совпадает с head indices, то возвращаю элемент и рекурсирую дальше.
unclechu
@unclechu:matrix.org
[m]
@arrowd: ну так если это обычный список, то length-ом ты уже весь список обходишь
Gleb Popov
@arrowd
Ну а shuffleM еще и сортирует как-то.
unclechu
@unclechu:matrix.org
[m]
[0;n) — это какая-то особая форма записи?
Gleb Popov
@arrowd
Ну да, в школе нас так учили. Имеется ввиду, от 0 до n, не включая n. Т.е. до n-1.
unclechu
@unclechu:matrix.org
[m]
@arrowd: а включая будет [0;n]?
Gleb Popov
@arrowd
Ну да.
unclechu
@unclechu:matrix.org
[m]
@arrowd: а как ты индексы «в список объединяешь»? почему нельзя бесконечный список рандомов в диапазоне взять и отрезать индексов сколько нужно?
единственное, что дубликаты нужно будет обрабатывать
Gleb Popov
@arrowd
replicateM $ getRandomR (0, length list - 1)
Да, для этого у меня еще nub впендюрен и дополнительная рекурсия, которая генерит список индексов пока он не окажется нужной длины.
Но n в моей программульке обычно мало, поэтому оно не должно быть узким горлышком.
Ой, replicateM n ..., конечно же.
unclechu
@unclechu:matrix.org
[m]
ну тут уже столько перебираний списков по пути получается, так что не удивительно
Gleb Popov
@arrowd
Ну да, раскуриваю олеговщину уже.
Gleb Popov
@arrowd
Отцы, я не въезжаю в олеговщину: http://okmij.org/ftp/Haskell/perfect-shuffle.txt
Я понял что из входного списка строится двоичное дерево, но не понял зачем. Вся магия заключена в shuffle1.extract_tree, то смысл заклинаний от меня ускользает.
Alexander Tchitchigin
@gabriel-fallen
@arrowd по сути там происходит то же, что Вы и предлагали, с поправкой на другую семантику списка индексов. Из очевидных различий -- использование дерева (вместо сортировки) и CPS. CPS в GHC работает удивительно быстро, скорее всего это и есть один из фокусов.
Gleb Popov
@arrowd
Есть вот у меня data WithLocs a = WithLocs { inputLocs :: [Int], outputLoc :: Int, item :: a } и я работаю с [WithLocs a]. Здесь outputLocи являются чем-то вроде индексов, а inputLocs их референсят. Когда я делаю insert в такой список, мне приходится подкручивать локи всех элементов, идущих после вновь вставленного. При удалении то же самое, само собой.
Подозреваю, тут нужна какая-то специальная структура данных.
Чтобы она сама за этими локами следила, а я бы, как господин, ничего не делал.
unclechu
@unclechu:matrix.org
[m]
@arrowd: а назначение можно объяснить?
чего этим всем пытаемся добиться?
Gleb Popov
@arrowd
Гм, ну a - это штуки, которые имеют некие входы и один выход. Функции, например. А список [WithLocs a] представляет из себя "программу", написанную из этих функций. Либо, если с другой стороны посмотреть, это направленный граф, где в узлах стоят a, вот эти инпуты и аутпуты описывают ребра.
Alexander Tchitchigin
@gabriel-fallen
Если Инты уникальные (например, UUID), то ничего подкручивать не нужно... 🤔
Ну и для работы с графами есть штуки 3 библиотеки на Haskell.
Gleb Popov
@arrowd
Есть data D = A | B | C и transformA A = C. Нужно получить transformEverything, которая бы применяла transformA к A, а остальные значения не трогала. Это вроде over _A transformA, только нужно конструктор менять, а овер не дает так сделать.