Size: a a a

Elm Lang сообщество разработчиков

2017 September 11

Б

Богдан in Elm Lang сообщество разработчиков
Anton Kotenko
Max связанные списки и бинарные деревья в официальной документации в примерах, десятки пакетов Elm с графами и деревьями и вложенными структурами, не пойму откуда появилось допущение о невозможности создания таковых
Я говорю про невозможность написать стандартные структуры вроде хешмапа или связанного списка которые основаны на стандартных алгоритмах где для удаления какого-то элемента достаточно обновить ссылку у объекта слева на следующий объект а у объекта справа на предыдущий объект. Те структуры которые есть у элма это уже совсем другие структуры и построены по другим алгоритмам чтобы уменьшить пересоздание всего списка, но во многих случаях иммутабельность все равно будет затратней и будет иметь сложность не o(1) а o(log n) или даже o(n) потому что если в js например достаточно записать в массив новый объект по индексу то в elm нужно будте вернуть новый массив и ему прийдется этот массив хранить в например бинарном дереве чтобы можно было пересоздать только log n вершин.
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
Да, но так ты теряешь преимущества иммутабельности и типизации. Компромисс.

А ещё на js нельзя работать с указателями в памяти. И там сборщик мусора. Хотя можно было бы самим более эффективно вызывать деструкторы.
Это тоже компромисс.
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
Нет ничего более производительного, чем ассемблер
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
Если только свою плату спаять :-)
источник

к

кана in Elm Lang сообщество разработчиков
мне кажется, иммутабельность стоит этого log(n) оверхеда
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
И я про то же
источник

RS

Roman Salnikov in Elm Lang сообщество разработчиков
Стоп. Иммутабельность не означает пересоздание. Под капотом там используются персистентные структуры данных, которые изменяют только те части стуктуры, которые реально изменились, но при этом сохраняют возможность сравнения по ссылке
источник

к

кана in Elm Lang сообщество разработчиков
Ну поэтому и log(n)
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
Да, как тот же самый Immutable.js, только всё прозрачно
источник

RS

Roman Salnikov in Elm Lang сообщество разработчиков
а, да. не дочитал трэд, зацепился за "пересоздаётся")
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
Вывод один: Elm стоит того.
А если даже чем-то Elm не устраивает - юзай PureScript или GHCJS
источник

g

gsomix in Elm Lang сообщество разработчиков
Alexander Nuikin
Вывод один: Elm стоит того.
А если даже чем-то Elm не устраивает - юзай PureScript или GHCJS
источник

g

gsomix in Elm Lang сообщество разработчиков
Есть еще Fable.
источник

g

gsomix in Elm Lang сообщество разработчиков
Но мне показалось, что Elm намного лучше спроектирован для своих задач.
источник

AN

Alexander Nuikin in Elm Lang сообщество разработчиков
gsomix
Есть еще Fable.
Надо глянуть Fable. Спасибо
источник

g

gsomix in Elm Lang сообщество разработчиков
Привет. o/
источник
2017 September 12

PF

Pawel Filimonenkow in Elm Lang сообщество разработчиков
Богдан
Не согласен, я бы будучи новичком не стал бы брать для изучения язык вроде элма на котором невозможно написать стандартные структуры и алгоритмы вроде бинарного дерева, приоритетной очереди, или даже обычного связанного списка
всё это можно написать
type List a = Empty | ListNode a (List a)

type Tree a = Nil | TreeNode (Tree a) a (Tree a)
источник

PF

Pawel Filimonenkow in Elm Lang сообщество разработчиков
Богдан
Нет, ни в жс ни в реакте не нужно ничего иммутабельно хранить, вот я сейчас разрабатываю на реакте с мобикс сложное приложение с разными сущностями которые образуют глубокое дерево или даже граф (чтобы например комментарий хранил массив других комментарий и каждый комментрий хранил ссылку на  parent - родительский комментарий.) и с таким состоянием намного удобней работать чем с библиотекой вроде редакса который как раз и форсит иммутабельность и приносит кучу неудобств
Mobx - это исключительно реакция на ущербность Redux. В принципе, люди могли бы просто юзать this.state в react, и это было бы хорошо. Я так делаю. Но людям надо либу - как символ, идею и религию. И MobX - это как раз это. Поэтому продается. Кроме как завернуть старое доброе ООП в символ и продавать под брендом, смысла в MobX нет никакого.
источник

PF

Pawel Filimonenkow in Elm Lang сообщество разработчиков
Богдан
Я говорю про невозможность написать стандартные структуры вроде хешмапа или связанного списка которые основаны на стандартных алгоритмах где для удаления какого-то элемента достаточно обновить ссылку у объекта слева на следующий объект а у объекта справа на предыдущий объект. Те структуры которые есть у элма это уже совсем другие структуры и построены по другим алгоритмам чтобы уменьшить пересоздание всего списка, но во многих случаях иммутабельность все равно будет затратней и будет иметь сложность не o(1) а o(log n) или даже o(n) потому что если в js например достаточно записать в массив новый объект по индексу то в elm нужно будте вернуть новый массив и ему прийдется этот массив хранить в например бинарном дереве чтобы можно было пересоздать только log n вершин.
Все не так.
Иммутабельность в Elm не вызывает заметного ухудшения производительности, пототому что  базовые структуры данных - персистентные. И массивы в Elm есть на всякий случай.  Та же быстрая сортировка Хора в JS и Elm с массивами примерно одинаково по скорости вычисляется. И по бенчмаркам todo list Elm в 2-3 раза быстрее todo list React если что.
источник

PF

Pawel Filimonenkow in Elm Lang сообщество разработчиков
gsomix
Но мне показалось, что Elm намного лучше спроектирован для своих задач.
Согласен. Fable сырой, документации чуть более нуля,  тащит за собой по мимо F# тонну кувалд и кирпичей - babel, webpack, npm, dotnetcore. А в Elm - установил elm и в путь. Fable идеологически ближе к TypeScript, чем к elm, но после   TypeScript вряд ли кто-то пожелает иметь дело с Fable.
источник