Alexander
первое нужно помнить, что в языке с gc аллокации гораздо дешевле, чем в иммутабельном, так же как и деалокация короткоживущих объектов
Alexander
(не считая аллокации на стеке и прочую радость)
Alexander
поэтому какой-нить аккуратный фьюзящийся алгоритм на векторах может всего-лишь в 1.1-1.3 раза проигрывать сишному коду (если там автор не навтыкает sse руками)
Alexander
но наверное это уже оффтоп по сравнению с тем, что тут обсуждали
Зигохистоморфный
есть еще подобное чтиво? https://blog.jakuba.net/2014/07/20/mutable-state-in-haskell.html
Alexander
@Vladimir_Sentsov в иммутабельном языке есть gc
Alexander
и поэтому там аллокации дешевые
Alexander
дороже, чем на стеке, но на стеке юзкейс ограничен
кана
черт, на henrychern.wordpress.com убрали содержание
кана
а, нет, ложная тревога
Влод
кстати, мутабельность особенно в конкурентном окружении может быть сильно переоценена
локальность данных теряется в иммутабельных языках быстрее
Влод
хотя, это скорее всё таки специфические задачи на больших массивах и в хаскеле наверное для такого есть специальные либы
Alexander
локальность штука интересная
Alexander
у haskell компактирующий gc
Alexander
у нас был случай (Зефиров про это писал не раз), мы (он) писали код для работы с потоковыми графами, по аналогии со stinger
Alexander
который сишная либа с openmp и радостями и считается одним из лучших решений
Alexander
так вот, начиная с какого-то размера графа haskell начинал обгонять сишный код, причем в разы
Alexander
т.к. у haskell куча собиралась и сжималась, и не было проблем с аллокациями, т.к. частый malloc/free приводил к тому, что у сишки работа с памятью дороже
Alexander
несмотря даже на специальные представления графов запросов и т.п.
Alexander
у нас тупо поверх IntMap было сделано
Alexander
с другой стороны если у тебя алгоритм на сях где ты можешь сам гарантировать локальность, то все лучше
Alexander
я не застал когда этот код писался, но я тестил это и результаты подтверились
Alexander
кстати либа есть на hackage
Alexander
не то, чтобы доделана и исходники только те что на hackage без истории
Зигохистоморфный
кстати либа есть на hackage
это ты про какую?
Влод
круто. граф (связи) обычно представляется в виде 2мерного массива, откуда там частые аллокации, компакты?
Alexander
GraphHammer
Alexander
@vlastachu ну вот у тебя есть граф гигов на 500, представляй
Alexander
http://stingergraph.com/
Alexander
можешь почитать у этих ребят и про представления и про алгоритмы
Влод
ну тут уже наверное тонкая работа над подгрузкой графа в оперативу
Alexander
я ж говорю там streaming graph, поидее в тебя идёт поток событий и ты должен что-то находу считать
Влод
ну, ладно. (разбираться в либах/алгоритмах, чтобы поддержать разговор я конечно не буду) из интересных моментов у компактящего гц может быть следующее: есть например многосвязная структура, пускай даже без циклов. и у гц стоит вопрос какие звенья ближе компактить - ведёт ли он для этого статистику чтений?
Alexander
не ведёт
Alexander
более чем уверен
Alexander
с другой стороны он же перемещает сначала что видит
Alexander
т.е. или depth или breadth first будет рядом складывать
Alexander
статистика это ж дорого
Alexander
вообще я так понимаю в gc стараются делать чем меньше тем лучше
Влод
ну да наверное
Alexander
вроде потому и thread local heap (точнее как называлась эта ветка) позволяющая минорные gc делать не stop the world не прижилась
Alexander
что код очень усложнился в impact почти не было
Alexander
скорее всего
Alexander
можно исходники посмотреть, но лень
Evgenii
melvin
было вчера
melvin
[begin..end] строится с помошью succ?
Anonymous
Prelude> :t [1.. 2] [1.. 2] :: (Num t, Enum t) => [t] да
Vladislav
Prelude> :t \a -> [a..a] \a -> [a..a] :: Enum t => t -> [t]
Vladislav
Так нагляднее (нет Num)
Vladislav
Только вот там не succ, а enumFromTo
Vladislav
Это отдельный метод класса
Alignant
Недавно начал изучать Haskell. Я так понял, джентельменский набор — это GHCi и текстовый редактор? IDE никто не использует?
Alexandr
Их нет
Alexandr
Плагины для Sublime/Atom etc
Anonymous
есть среда для MacOS
Anonymous
Haskell for Mac вроде
Alexandr
Скорее всего еще в JetBrain'овских IDE есть плагины
Alexandr
Да, точно http://haskellformac.com
Зигохистоморфный
Плагины для Sublime/Atom etc
последнее обновление плагина для idea очень даже ок
Alexandr
А как он сам по себе? Я для Rust плагин юзал и он адски тормозной
Alexandr
Причем под словом адски я подразумеваю то, что он по 5 минут может подсвечивать ошибку в синтаксисе, которой уже нет
Зигохистоморфный
А как он сам по себе? Я для Rust плагин юзал и он адски тормозной
хз, запилили вроде там некоторые фичи в фоне, всякие хаддоки и прочее
Alexandr
Нужно будет попробовать, хотя для sublime очень даже норм
Зигохистоморфный
да ну нах
Зигохистоморфный
к саблайм
Зигохистоморфный
так жрет проц что ну его нафиг
melvin
разница let <> in <> и просто let <> в том что в первом случае let виден только в скоупе in, а во втором в текущем скоупе?
a66ath
Второе это сахарок для первого :|
Alexandr
так жрет проц что ну его нафиг
Ну тут уже приходится выбирать. Либо проц, либо оператива
Зигохистоморфный
a66ath
Ну а где ты видел let без in кроме как в do?
Alexandr
idea написана на джаве, она по определению жрет оперативу как скотина
a66ath
Ты не поверишь
a66ath
Внутре ghci жирное do в IO монадке
Зигохистоморфный
это да)) все в IO живет
melvin
🤔