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 без истории
Зигохистоморфный
Влод
круто. граф (связи) обычно представляется в виде 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
Alexandr
А как он сам по себе? Я для Rust плагин юзал и он адски тормозной
Alexandr
Причем под словом адски я подразумеваю то, что он по 5 минут может подсвечивать ошибку в синтаксисе, которой уже нет
Alexandr
Нужно будет попробовать, хотя для sublime очень даже норм
Зигохистоморфный
да ну нах
Зигохистоморфный
к саблайм
Зигохистоморфный
так жрет проц что ну его нафиг
melvin
разница let <> in <> и просто let <> в том что в первом случае let виден только в скоупе in, а во втором в текущем скоупе?
a66ath
Второе это сахарок для первого :|
melvin
Зигохистоморфный
a66ath
Ну а где ты видел let без in кроме как в do?
Alexandr
idea написана на джаве, она по определению жрет оперативу как скотина
melvin
a66ath
Ты не поверишь
a66ath
Внутре ghci жирное do в IO монадке
Зигохистоморфный
это да)) все в IO живет
melvin
🤔