Size: a a a

Clojure — русскоговорящее сообщество

2019 May 02

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Andrew Rudenko
пара советов:
1. поменьше читать сайтиков
2. подобные оптимизации это та самая кнутовская классика. запили алгоритм — увидишь, что тормозит на... на чем оно по твоему тормозить будет, что за оверхед? на аллокациях? на копированиях?
и так вот. очень может оказаться, что чисто фунциональный подход у тебя будет работать даже эффективнее, чем эти твои жонглирование "объектами"
источник

G

Gleb in Clojure — русскоговорящее сообщество
Gleb
Пока никакие алгоритмы не используют данную функцию.
А если пользователь библиотеки создаст вершину с таким же именем и данными, и поместит её в граф. Тогда одни и те же данные будут занимать лишнюю память. Как в данном случае быть?
источник

G

Gleb in Clojure — русскоговорящее сообщество
Andrew Rudenko
и так вот. очень может оказаться, что чисто фунциональный подход у тебя будет работать даже эффективнее, чем эти твои жонглирование "объектами"
Из их возможностей я пока что использовал диспатчинг по протоколам. (Проверка, можно ли добавлять атрибуты (в attrs) в объект или нет). Например, чтобы во фрагмент случайно не записалось поле attrs с атрибутами.
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Gleb
А если пользователь библиотеки создаст вершину с таким же именем и данными, и поместит её в граф. Тогда одни и те же данные будут занимать лишнюю память. Как в данном случае быть?
вот опять ты преждевременно оптимизируешь
источник

G

Gleb in Clojure — русскоговорящее сообщество
То же самое можно было сделать мультиметодами, но они по производительности сильно уступают протоколам (если верить сайтикам)
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
если ты правда хочешь сделать сверх оптимальную библиотеку для работы с графами с минимальными аллокациями, то, возможно, тебе не стоит писать ее на кложе
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
но если ты все же не хочешь делать сверх оптитмальную библиотеку, то, скорее всего, тебе об этом просто не надо думать
источник

G

Gleb in Clojure — русскоговорящее сообщество
Andrew Rudenko
но если ты все же не хочешь делать сверх оптитмальную библиотеку, то, скорее всего, тебе об этом просто не надо думать
Понял. А как быть в случае с возможным дублированием одинаковых (в смысле данных) вершин в графе?
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
ну в целом рецепт такой: если данные одинаковые, то и поведение должно быть одинаковым, не? )
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
т.е. если у тебя два фрагмента описаны одинаково, то с точки зрения алгоритма они не отличимы
источник

G

Gleb in Clojure — русскоговорящее сообщество
Andrew Rudenko
т.е. если у тебя два фрагмента описаны одинаково, то с точки зрения алгоритма они не отличимы
(def v1 (Vertex. "v1") ) (def v2 (Vertex. "v1)) - строка "v1" будет занимать x2 памяти
источник

G

Gleb in Clojure — русскоговорящее сообщество
Или clojure это как-то оптимизирует в смысле того, что в памяти это будет один и тот же объект?
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
1. похуй
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
2. возможно это оптимизнет жвм
источник

G

Gleb in Clojure — русскоговорящее сообщество
Andrew Rudenko
1. похуй
ок:)
источник

A

Alexander in Clojure — русскоговорящее сообщество
Andrew Rudenko
1. похуй
2. см 1
источник

G

Gleb in Clojure — русскоговорящее сообщество
Andrew Rudenko
2. возможно это оптимизнет жвм
а, ну тогда ладно
источник

A

Alexander in Clojure — русскоговорящее сообщество
источник

A

Alexander in Clojure — русскоговорящее сообщество
Тлдр - да, оптимизирует
источник

A

Alexander in Clojure — русскоговорящее сообщество
Начиная с 8u20
источник