спецолимпиадное

Jun 26, 2019 13:05

По мотивам поста Никиты про разницу в производительности "высокоуровнего/функционального" и "низкоуровнего/императивного" кода. Взял буквально его пример с созданием массива пар чисел. Его оригинал на кложе:

(concat
(mapv
(fn [y] [from-x y])
(range from-y (quot to-y 2)))
(mapv
(fn [y] [to-x y])
(range (quot to-y 2) to-y)))
Как ( Read more... )

fp

Leave a comment

Comments 18

avnik June 26 2019, 12:50:33 UTC
Я бы тогда вообще смотрел в сторону Data.Vector.Unboxed где примитивные типы лежат тупо в куске выделеной памяти (как в сишечке). Но я гм, начинающий хаскеллист, могу ошибаться. (А вот на простой Data.Vector я смотрю с большой осторожностью, там легко налепить ненужных аллокаций)

Reply

thedeemon June 26 2019, 13:02:07 UTC
Я именно его и использую в приведенном примере.

Reply


theiced June 26 2019, 13:20:00 UTC
у штангистов не принято обращать внимания на такие мелочи как производительность и потребление памяти.

Reply

theiced June 26 2019, 13:42:48 UTC
(на всякий - я не говорю что это что то плохое - это просто есть).

Reply

thedeemon June 26 2019, 14:33:21 UTC
Ну они же реализовывали array fusion в этом vector, и всякие list/stream fusion и deforestation в других местах, у них есть всякие штуки для анбоксинга того и сего, т.е. определенные усилия в интересную оптимизацию там вложены, нужно научиться ими правильно пользоваться. Я пока не теряю надежды. :)

Reply

rdia July 7 2019, 20:26:49 UTC
> т.е. определенные усилия в интересную оптимизацию там вложены, нужно научиться ими правильно пользоваться.

Ну вы при этом будете как тот новый русский "один идиот едет по встречке? да тут их тысячи!". Реально всё может работать очень быстро и легко - см тот же Ocaml или Clean. Собственно, тот же Tonski упоминает Ocaml, который ну ничем не ближе к железу, чем тот же Х-ль. Просто разработчики Ocaml'а фанатично борятся за скорость.

Но сообщество Хаскелистов этим не заморачивается. Их реально устраивает то, что stack тратит чуть ли не секунду на старт. Что он при этом делает такого, что не делает dune или omake или ещё какая-то камловская система сборки, отрабатывающая за десятую долю этого времени, непонятно. И, очевидно, можно было бы ускорить stack, но всем насрать. Такая культура.

Reply


ext_4779474 October 9 2019, 18:25:33 UTC
А как измерялось время работы? Потому что на своей машине простым лист компрехеншеном получил 86 ms

Reply

thedeemon October 9 2019, 19:59:42 UTC
Довольно примитивно измерялось:
https://gist.github.com/thedeemon/0aa2ad85ff4f12098391981375c39f16
(один из вариантов, там закоментированы некоторые другие подходы)

Reply


Leave a comment

Up