@haskellru

Страница 346 из 1551
Vasiliy
04.08.2017
19:06:17
или и то, и другое? :)

Index
04.08.2017
19:06:31
Скорее всего читать бесплатно онлайн можно будет, а как печатать не решили еще.

Vladislav
04.08.2017
19:06:33
кто-нибудь пишет ICFPC?

Vasiliy
04.08.2017
19:09:35
ну если бесплатно онлайн, тогда реквестирую возможность оставлять комментарии к абзацам, как у RWH

Google
Vasiliy
04.08.2017
19:10:05
когда читал, в комментариях порой очень полезные сведения были

Alexander
04.08.2017
19:27:33
ICFPC как обычно выпадает на ДР

неудобно

Index
04.08.2017
19:39:06
ну если бесплатно онлайн, тогда реквестирую возможность оставлять комментарии к абзацам, как у RWH
Сейчас там есть возможность оставить коммент, который придет на почту автору (выделить кусок текста и написать). В отличие от RWH эта книжка будет непрерывно обновляться, так что это больше подходит, чем комментами отвлекать от материала

Artem
04.08.2017
20:39:28
Товарищи! Кто-нибудь ghc-mod каким-либо образом использует? (через плагины к редакторам там) как жить с GHC 8.2.1, который с ним не совместим?

Abbath
04.08.2017
20:40:05
Никак

Ждать пока допилят

Artem
04.08.2017
20:41:36
Автор в issue пишет, что у него планов таких нет (?!)

Но что типа открыт к пулл-реквестам

Моего очень скромного кунг-фу не хватило, чтобы зависимости разрулить

Ошибки там простые, вроде, штук 5. Но зависимости… cabal-check (того же автора :( ) зависит от process с ub меньшей, чем lb у ghc 8.2.1

Abbath
04.08.2017
20:46:13
Юзай стек и intero, он вроде прямо из ghc дергает данные

Artem
04.08.2017
20:51:48
Юзай стек и intero, он вроде прямо из ghc дергает данные
Да, выглядит разумно, спасибо за совет

Google
Denis
04.08.2017
21:00:25
о! etalang https://github.com/carymrobbins/intellij-haskforce/releases/tag/v0.3-beta.38

Vladislav
05.08.2017
02:37:33
спам

Den
05.08.2017
13:29:07
Глупый вопрос по оптимизации: есть `f cb = someMonadicAction1 >> cb >> someMonadicAction2`, и где-то есть `ff (return ())` - может ли этот `return ()` быть выкинутым компилятором?

kana
05.08.2017
13:30:34
Внутри >> может происходить какая-то логика, которую нельзя выкинуть.

Den
05.08.2017
13:30:52
ну, допустим, у нас IO

А как вообще это проверить можно? GHC может выдавать тонну промежуточной отладочной информации, и в ней не очень-то приятно копаться. Есть ли какой-нибудь относительно простой способ увидеть, что и как оптимизируется?

"отладочной информации" - в смысле, результатов стадий компилации, которая не очень-то читабельная

Yuriy
05.08.2017
13:35:01
да, есть несколько стадий компиляции, и почти все они могут сдампить свой результат, каждая в своём формате

обычно начинают с -ddump-simpl — так называемый Core

вот тут подробно https://takenobu-hs.github.io/downloads/haskell_ghc_illustrated.pdf

Den
05.08.2017
13:37:36
о, спасибо, почитаю

(ну или мне надо в себе "низкоуровнего сишника" давить:))

Yuriy
05.08.2017
13:39:45
скорее, подавить операционного семантиста

у Хаскелла денотационная семантика убер аллес, то есть компилятор оставляет за собой право как угодно менять твой код при условии сохранения результата

правда, на практике он не так уже сильно меняется

Den
05.08.2017
13:42:18
да, я это понимаю, и наверно поэтому каждый раз возникает вопрос эффективности в "критических секциях"..

Yuriy
05.08.2017
13:42:28
я обычно разбирательство в коде начинаю с -ddump-simpl -dsuppress-all и на этом же заканчиваю, потому что всё становится понятно

Den
05.08.2017
13:45:41
ещё часто Debug.Trace.trace помогает. Кстати, в описанном выше случае, похоже, ничего не отсекается.

Alexander
05.08.2017
14:26:41
если там было определение ff и оно заинлайнится и это IO то будет выкинуто, но не представляю как debug.trace-ом это хотелось проверить

Den
05.08.2017
14:29:15
Ну вот например: main = do f (putStrLn "!") f (return $ trace "_1" ()) f (trace "_2" $ return ()) where f cb = putStrLn "1" >> cb >> putStrLn "2" выводит _2

Google
Den
05.08.2017
14:30:27
с другой стороны, может ли trace тут влиять на решения оптимизатора?

Leonid
05.08.2017
15:44:37
Ещё как

kana
05.08.2017
16:11:54
Вот один костыльный способ проверить: копипастом добавь сотню-две таких пустых операций и посмотри на размер результатирующего бинарника

Yuriy
05.08.2017
16:18:03
и на скорость ещё можно посмотреть

и на разных уровнях оптимизации проверить

Den
05.08.2017
16:24:10
о, без -O2 размер растёт, с -O2 - нет. При этом вариант с trace всё равно срабатывает, что и логично. Спасибо!

притом с -O2 по``-ddump-simpl` видно, что `f` заинлайнено

в общем, проблема была лишь в том, что я забыл про параметр -O

Vasiliy
05.08.2017
17:06:45
Внутри >> может происходить какая-то логика, которую нельзя выкинуть.
но при этом return () >> a = a , так что >> вполне можно выкинуть

Alexander
05.08.2017
17:19:45
нужно на ddump-simpl смотреть и все

kana
05.08.2017
17:24:31
но при этом return () >> a = a , так что >> вполне можно выкинуть
Законы не всегда исполняют) А для компилятора этих законов и вовсе нет

Vasiliy
05.08.2017
17:26:52
гм... я читал, что компилятор активно пользуется законами при оптимизациях

kana
05.08.2017
17:28:25
Хм, а если им не следовать?

Определить >> с каким-нибудь эффектом

Евгений
05.08.2017
17:33:40
Ну типа если ты им не следуешь, то ссзб

Дмитрий
06.08.2017
01:42:54
Хм, а если им не следовать?
На первый раз отделаешься штрафом

Vladislav
06.08.2017
03:37:12
Заходим в рекламируемые каналы и жмём Report -> Spam. Чем больше будет репортов, тем вероятнее, что мы избавим телегу от спамеров!

Donat
06.08.2017
08:33:39
-Почему-то нет такого пункта в меню у меня. Только на мобильном клиенте?- Нашлось.

Like
06.08.2017
18:38:37
Добрый вечер всем. В гугле забанили, ничерта не понимаю. Поделитесь, пожалуйста, докой/примерами (желательно с описанием того, что пишут...) по Alex/Happy, спасибо!

Aleksey
06.08.2017
18:46:33
По ним вроде книжка была

Google
Aleksey
06.08.2017
18:47:20
https://leanpub.com/alexandhappy/read

Like
06.08.2017
18:47:34
Спасибо

Vladislav
07.08.2017
03:38:09
Заходим в рекламируемые каналы и жмём Report -> Spam. Чем больше будет репортов, тем вероятнее, что мы избавим телегу от спамеров!

Den
07.08.2017
11:46:59
Дня всем доброго! В документации Control.Monad.Trans.Resource крайне рекоммендуют освобождать ресурсы вручную, не дожидаясь авточистки. А чем грозит обратное, с практической стороны? Я пишу backend на servant-е, и, соответственно, нужно выдавать Connection-ы к бд обработчикам запросов из пула, потом их туда возвращая. Пока надумалось только два варианта: внутри каждого обработчика вызывать что-то типа withConnection, либо отдавать Connection обработчикам из-под instance HasServer, и через Control.Monad.Trans.Resource.register его возвращать в пул. Первый вариант несколько некрасив, второй не подразумевает ручного освобождения ресурсов.

Anatolii
07.08.2017
11:48:19
можно попробовать что-то вроде https://hackage.haskell.org/package/resource-pool

Den
07.08.2017
11:48:46
а оно сейчас и используется. Вопрос только в том, как возвращать соединение обратно в пул

Alexander
07.08.2017
11:48:48
+ к resource-pool

оно само, по выходу из withResource

Den
07.08.2017
11:49:07
withConnection через него и работает

Alexander
07.08.2017
11:49:17
ну и все

Den
07.08.2017
11:49:21
ну тогда каждый обработчик запроса надо будет в него оборачивать, а это некрасиво совсем

Anatolii
07.08.2017
11:49:25
putResource

я не очень уверне что конект к базе надо брать в самом начале запроса

Alexander
07.08.2017
11:50:03
зачем каждый оборачивать?

если вообще всегда каждый надо, то через mmorph или что-там, сделать чтобы они в ReaderT Connection работали

Den
07.08.2017
11:50:38
в моём случае, 99% api-запросов состоят из одного SQL-запроса

Alexander
07.08.2017
11:50:46
тогда только 1 раз при инициализации надо сделать

вообще я большой разницы между обернуть и "takeResource" не вижу, в первом случае даже кода меньше

Den
07.08.2017
11:51:39
но всё же, чем плохо надеяться на ..Resource.register?

ну, отбработчики попроще получаются. Там будет что-то типа Connection -> ApiHandler a, состоящий только из запросов, то бишь вся "кухня" возни с пулами будет скрыта.

Google
Anatolii
07.08.2017
11:53:07
а где ты прочел что оно рекомендует отпускать ресуры вручную?

Alexander
07.08.2017
11:53:32
resourcet сделано для того, чтобы можно было отпустить ресурсы когда укажешь

не то, что рекомендуется, но сделано в основном для этого

Den
07.08.2017
11:53:46
https://hackage.haskell.org/package/resourcet-1.1.9/docs/Control-Monad-Trans-Resource.html: Releasing may be performed before exit via the release function. This is a highly recommended optimization, as it will ensure that scarce resources are freed early. Note that calling release will deregister the action, so that a release action will only ever be called once.

Alexander
07.08.2017
11:53:48
отпустит и без

по выходу из resourcet

в отличии от lazy io и надежды на GC

они про это пишут

Den
07.08.2017
11:54:45
тоесть есть шанс ненулевой, что ресурс освободится несколько позже?

в случае backend-а это может к dos-у привести :)

Страница 346 из 1551