Alexander
что за дистр?
Ilya
ubuntu 16.04
Alexander
подключай ppa hvr
Alexander
если он для этой убунты есть
Alexander
там можно сразу много ghc ставить и переключаться
Ilya
подключай ppa hvr
Convenient packages for GHC releases from http://www.haskell.org/ghc/ (plus cabal-install packages) which can be installed side by side for working/testing with multiple/older GHCs
Ого круто, обязательно поставлю, спасибо
Alexander
как переключать я не помню, но в документации все есть
Vladimir
Alexander
кабалу --with-ghc при конфигурации и он будет с нужным ghc
Vladimir
Правда, наверняка так сделал уже кто-нибудь.
Alexander
я обычно забиваю на это и у меня старые ghc проверяет CI
Alexander
собственно для того тот реп и полезен
Alexander
Alexander
вроде там были срезы и многомерность
Vladimir
Repa припоминаю, но там по-моему был полный треш, gpu и cuda) не будет ли оверкиллом при ежедневном использовании? Ну и end-индексация под вопросом.
Alexander
https://hackage.haskell.org/package/massiv последнее это это
Alexander
а она нужна индексация end?
Alexander
можно наверное поверх Ix сделать если там ещё нет
Vladimir
а она нужна индексация end?
Вот, правильный вопрос. По моему опыту с matlab/octave и numpy чаще всего из всей этой возни с матрицами нужны срезы по одной размерности в двух видах: "один индекс" и "начальный индекс + шаг".
Vladimir
А всякие a[end - 2] можно и пережить. Нужны они раз в два года, может в три.
Vladimir
Правда, a[end] тоже часто надо. Можно, конечно, отдельной функцией типа того же упомянутого last'а.
Alexander
Alexander
end прикольный когда надо отдать его в другой код и нету массива, чтобы померять длину
Alexander
но я знаю в какой задаче это надо
Alexander
если на руках есть массив то вопросов не возникает, а если массива нету, то такой индекс может хотеться
Alexander
Собственно, сделал первый прототип асинков: https://gist.github.com/JelF/19378c03eadb198f1b500493ac2406eb
Два вопроса: почему у меня результат вычислений пролезает через TMVar лениво (Result: появляется раньше самого результата) и почему течет память?
A64m
Alexander
можешь выхлоп показать?
Alexander
там же Result: число должно появляться, как он может не раньше быть?
Alexander
или про то, что там задержка?
Alexander
если про это то логично
Alexander
ты в фоне выполняешь /return Smtg
Alexander
и.е. ответ у тебя готов сразу и ты возвращаешь вычисление
Alexander
и получатель его форсит
Alexander
что можно сделать: evaluate и вычислять хотя бы до WHBF
Alexander
NF
Alexander
потребовать NFData и делать deepseq
Alexander
потребовать Storable/Serializable и сеарилизовать
Alexander
попросить пользователя быть разумным и решить проблему самому
Alexander
@JelF1337
Alexander
с телефона написать код для этих вариантов не могу
Alexander
можешь выхлоп показать?
*Sandbox> heavyDemo
Lets go
Scheduled heavy 10000000
Result:
потом выводится до конца
Alexander
вроде это и ожидается судя по коду
Alexander
ну вероянтно да, учитывая что код простой
Alexander
но смотри в тебя работу главный тред выполняет
Alexander
см объяснение выше
Alexander
ну как бороться с этим я примерно понял
Alexander
а почему так получается нет :(
Alexander
смотри pure a сразу возвращает санк
Alexander
он его не вычисляет
Alexander
будут боты хайлайтите @graninas и @icrbow вместо меня плз
Alexander
теперь они могут спасать мир :)
Alexander
ну да, я и ожидаю что он сначала вернет TMVar а потом будет его вычислять в отдельном треде
Alexander
смотри, если ты передашь evaluate (...) то будет норм
Alexander
Чорд, придется теперь работать. 😔
Спасибо, будем стараться 😊
Alexander
но вообще да, он сначала вернет, потом будет вычислять
Alexander
но, вместо того, чтобы вычислять он готовит: все готово, вот ваш санк
Alexander
смотри, если ты передашь evaluate (...) то будет норм
heavyDemo = do
putStrLn "Lets go"
promise <- async (evaluate . ("Result: " ++) . show . heavy) 10000000
putStrLn "Scheduled heavy 10000000"
await promise >>= putStrLnты имеешь в виду так? Ничего не изменилось
Alexander
получатель читается его
Alexander
читает его, смотрит, вот мой санк и давай его вычислять чтобы ответ написать
Alexander
ну я не вижу почему ты другой вывод ожидаешь..
Alexander
ты сначала пишешь go, потом пишешь shedule, потом выводишь результат
Alexander
собственно это ты видишь в консолт
Alexander
получается дело в том что putTMVar ленивый?
Alexander
он ленивый конечно, но тут это ни на что не влияет
Alexander
а как санк узнает из чего он вычисляется?
Alexander
смотри, у нас 2 части задачи
Alexander
забудем пока про санк
Alexander
к тебя код вида:
создать мвар
в соседнем треде $ вычислить и положить результат в мвар
отдать мвар
так?
Alexander
да
Alexander
и.е. этот метод возвращается сразу же, отдавая тебе тмвар
Alexander
ага
Alexander
и.е. мы на экран получаем go и scheduled .., так?
Alexander
и пока мы это получаем у нас в другом потоке уже делается наше вычисление
Alexander
да
Alexander
далее когда мы вызываем await мы блокируемся до тех пор как у нас в тмвар будет что-то лежать
Alexander
да
Alexander
как только результат появится, мы увидим в консоли Result
Alexander
так у меня телефон сейчас сядет, пропаду в любой момент