
Alexander
10.08.2017
11:15:44
community split на пустом месте, другая RTS со своими проблемами
т.е. это совсем другой язык
единственный плюс, что все средства выполнения и инструментирования от явы есть
т.е. с inline-java так нельзя

Google

Alexander
10.08.2017
11:16:31
т.к. haskell код остается нативным
и переносимости которая есть в java нету
и отдадчик/профилировщик так просто не прицепить
но зато с inline-java можно нормально haskell код писать

Vladimir
10.08.2017
11:19:48
Ну обычно проблемы на scala разраба найти. А на eta где потом кодера искать будут?

Anatolii
10.08.2017
11:20:19
хаскелистов перетащат

Андрей
10.08.2017
11:20:50

Denis
10.08.2017
11:25:35
я как-то находил Monad.Imperative
https://hackage.haskell.org/package/ImperativeHaskell-2.0.0.1

Vladimir
10.08.2017
11:26:03
Ну обычно это бывает если есть кеш. Обычно по проекту лень лазить и детально в нем копаться.

Denis
10.08.2017
11:27:14
во примеры https://github.com/mmirman/ImperativeHaskell/blob/master/Main.hs

Vladimir
10.08.2017
11:36:13
Хотя вот императивость нужна, чтобы perfomance повысить. Например миллиарды раз создать, а потом удалить обьект может быть накладно. Хотя обычно все тормозит IO.

Alexander
10.08.2017
11:42:11
эм.. а при чем тут императивность?

Google

Alexander
10.08.2017
11:44:03
возможно имелось ввиду мутабельность?
которая не является ни следствием, ни синонимом императивности

Vladimir
10.08.2017
11:45:05
Ну например операция присваивания переменной нового значения. Мне казалось, что это императивная операция. Вот например берем обьект с большим числом полей и изменяем несколько.

Alexander
10.08.2017
11:47:51
императивное = ты описываешь последовательность операций
функциональное = ты описываешь граф зависимостей, который как-то будет редуцироваться
если в объекте заменяются поля, то все зависит от того, изменяемый (mutable) он (или язык) или нет
так например в java (до 1.8) строка это неизменяемый объект, и "изменение" строки приведёт к аллокации нового объекта и отмечанию старого как неиспользуемого
(что кстати там в 1.8 и далее, уже всегда mutable? не слежу уже особо)
функциональному языку мутабельным никто быть не запрещает, но обычно это может добавить сложностей

Андрей
10.08.2017
11:52:24
В F# есть мутабельность, в куче Лиспов/Схем (даже в моем Лискрипте), в Скале/Кложе вроде тоже (каламбур ? ) Сложности есть, но что не сделаешь ради желанной мутабельности ?

Alexander
10.08.2017
11:52:36
например в haskell никто не запрещает сделать alloca или использовать structs и менять что угодно
главное, что если язык ленивый нужно сохранить все data dependency
кстати, мутабельность особенно в конкурентном окружении может быть сильно переоценена
первое нужно помнить, что в языке с gc аллокации гораздо дешевле, чем в иммутабельном, так же как и деалокация короткоживущих объектов
(не считая аллокации на стеке и прочую радость)
поэтому какой-нить аккуратный фьюзящийся алгоритм на векторах может всего-лишь в 1.1-1.3 раза проигрывать сишному коду (если там автор не навтыкает sse руками)
но наверное это уже оффтоп по сравнению с тем, что тут обсуждали

Vladimir
10.08.2017
12:35:09
А в иммутабельном языке нет gc?
Все на стек разве кладется?

Denis
10.08.2017
12:41:01
есть еще подобное чтиво? https://blog.jakuba.net/2014/07/20/mutable-state-in-haskell.html

Google

Vladimir
10.08.2017
12:41:02
Хотя если реализована подстановочная модель вычисления, то это скорее всего так. Стек сам собой получится.
Открыл ссылку и все родное синхронизация, транзакциионная память...

Alexander
10.08.2017
12:56:57
@Vladimir_Sentsov в иммутабельном языке есть gc
и поэтому там аллокации дешевые
дороже, чем на стеке, но на стеке юзкейс ограничен

kana
10.08.2017
13:01:12
черт, на henrychern.wordpress.com убрали содержание
а, нет, ложная тревога

? animufag ?
10.08.2017
13:05:18
хотя, это скорее всё таки специфические задачи на больших массивах и в хаскеле наверное для такого есть специальные либы


Alexander
10.08.2017
13:07:11
локальность штука интересная
у haskell компактирующий gc
у нас был случай (Зефиров про это писал не раз), мы (он) писали код для работы с потоковыми графами, по аналогии со stinger
который сишная либа с openmp и радостями и считается одним из лучших решений
так вот, начиная с какого-то размера графа haskell начинал обгонять сишный код, причем в разы
т.к. у haskell куча собиралась и сжималась, и не было проблем с аллокациями, т.к. частый malloc/free приводил к тому, что у сишки работа с памятью дороже
несмотря даже на специальные представления графов запросов и т.п.
у нас тупо поверх IntMap было сделано
с другой стороны если у тебя алгоритм на сях где ты можешь сам гарантировать локальность, то все лучше
я не застал когда этот код писался, но я тестил это и результаты подтверились
кстати либа есть на hackage

Google

Alexander
10.08.2017
13:12:28
не то, чтобы доделана и исходники только те что на hackage без истории

Denis
10.08.2017
13:15:47

? animufag ?
10.08.2017
13:15:49
круто. граф (связи) обычно представляется в виде 2мерного массива, откуда там частые аллокации, компакты?

Alexander
10.08.2017
13:15:57
GraphHammer
@vlastachu ну вот у тебя есть граф гигов на 500, представляй
http://stingergraph.com/
можешь почитать у этих ребят и про представления и про алгоритмы

? animufag ?
10.08.2017
13:17:34
ну тут уже наверное тонкая работа над подгрузкой графа в оперативу

Alexander
10.08.2017
13:18:14
я ж говорю там streaming graph, поидее в тебя идёт поток событий и ты должен что-то находу считать

? animufag ?
10.08.2017
13:21:25
ну, ладно. (разбираться в либах/алгоритмах, чтобы поддержать разговор я конечно не буду)
из интересных моментов у компактящего гц может быть следующее: есть например многосвязная структура, пускай даже без циклов. и у гц стоит вопрос какие звенья ближе компактить - ведёт ли он для этого статистику чтений?

Alexander
10.08.2017
13:24:41
не ведёт
более чем уверен
с другой стороны он же перемещает сначала что видит
т.е. или depth или breadth first будет рядом складывать
статистика это ж дорого
вообще я так понимаю в gc стараются делать чем меньше тем лучше

? animufag ?
10.08.2017
13:36:30
ну да наверное

Alexander
10.08.2017
13:36:40
вроде потому и thread local heap (точнее как называлась эта ветка) позволяющая минорные gc делать не stop the world не прижилась
что код очень усложнился в impact почти не было

? animufag ?
10.08.2017
13:37:52

Google

Alexander
10.08.2017
13:41:07
скорее всего
можно исходники посмотреть, но лень

Vladimir
10.08.2017
14:53:53
Ну поробовали бы java. Там тоже сравнительно дешевая аллокация/деаллокация. Так как нет адресной арифметики.

Evgeniy
10.08.2017
14:59:44

melancholiac
10.08.2017
15:00:36
было вчера
[begin..end] строится с помошью succ?

kir
10.08.2017
18:43:17
Prelude> :t [1.. 2]
[1.. 2] :: (Num t, Enum t) => [t]
да

Index
10.08.2017
18:43:54
Prelude> :t \a -> [a..a]
\a -> [a..a] :: Enum t => t -> [t]
Так нагляднее (нет Num)
Только вот там не succ, а enumFromTo
Это отдельный метод класса

Eugene
10.08.2017
21:01:13
Недавно начал изучать Haskell. Я так понял, джентельменский набор — это GHCi и текстовый редактор? IDE никто не использует?

Alexandr
10.08.2017
21:02:45
Их нет
Плагины для Sublime/Atom etc

Даня
10.08.2017
21:03:09
есть среда для MacOS
Haskell for Mac вроде

Alexandr
10.08.2017
21:03:20
Скорее всего еще в JetBrain'овских IDE есть плагины
Да, точно
http://haskellformac.com

Denis
10.08.2017
21:06:30

Alexandr
10.08.2017
21:07:08
А как он сам по себе? Я для Rust плагин юзал и он адски тормозной
Причем под словом адски я подразумеваю то, что он по 5 минут может подсвечивать ошибку в синтаксисе, которой уже нет