Size: a a a

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

2021 January 26

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
https://github.com/clojure/core.rrb-vector
вот тут еще советую почитать про альтернативную имплементацию
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
в ней самое узкое место подтюнено - конкатенация векторов
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Kirill Chernyshov
в ней самое узкое место подтюнено - конкатенация векторов
самое узкое место там добавление элементов в пустой массив
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Это примерно втрое медленнее чем ArrayList[]
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Anton Chikin
Это примерно втрое медленнее чем ArrayList[]
(time
(dotimes [i 1000000]
  (conj [] i)))
;; "Elapsed time: 70.439744 msecs"

(time
(dotimes [i 1000000]
  (.add (java.util.ArrayList.) i)))
;; "Elapsed time: 48.26328 msecs"

где тут “втрое медленнее”?
источник

RS

Roma S in Clojure — русскоговорящее сообщество
Kirill Chernyshov
(time
(dotimes [i 1000000]
  (conj [] i)))
;; "Elapsed time: 70.439744 msecs"

(time
(dotimes [i 1000000]
  (.add (java.util.ArrayList.) i)))
;; "Elapsed time: 48.26328 msecs"

где тут “втрое медленнее”?
хм, эрэйлист тут быстрее видимо потому что агрессивнее растёт, и через несколько ресайз-копи циклов начинает просто с одним куском работать; а ветор чанки так и аллоцирует
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
и первый и второй варианты создают пустой вектор/ArrayList и добавляют один элемент
источник

RS

Roma S in Clojure — русскоговорящее сообщество
Kirill Chernyshov
и первый и второй варианты создают пустой вектор/ArrayList и добавляют один элемент
да, сорян
источник

RS

Roma S in Clojure — русскоговорящее сообщество
чот вэрианс дикий у меня:
(time (dotimes [i 1000000] (conj [] i)))
"Elapsed time: 38.424023 msecs"
nil
(time (dotimes [i 1000000] (.add (java.util.ArrayList.) i)))
"Elapsed time: 24.367542 msecs"
nil
(time (dotimes [i 1000000] (conj [] i)))
"Elapsed time: 21.485425 msecs"
nil
(time (dotimes [i 1000000] (conj [] i)))
"Elapsed time: 21.172863 msecs"
nil
(time (dotimes [i 1000000] (.add (java.util.ArrayList.) i)))
"Elapsed time: 41.148749 msecs"
nil
(time (dotimes [i 1000000] (.add (java.util.ArrayList.) i)))
"Elapsed time: 32.972849 msecs"
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
все равно разница ничтожно малая, и легко может нивелироваться оптимизациями через шаринг для векторов с больщим количесвтом элементов
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
не мучайтесь
примерно так
  (conj [] "") #_"20 ns"
 (.add (java.util.ArrayList.) "") #_"12 ns"
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Kirill Chernyshov
(time
(dotimes [i 1000000]
  (conj [] i)))
;; "Elapsed time: 70.439744 msecs"

(time
(dotimes [i 1000000]
  (.add (java.util.ArrayList.) i)))
;; "Elapsed time: 48.26328 msecs"

где тут “втрое медленнее”?
Чувак в статье делал нормальные перфоманс тесты, посмотри.
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Anton Chikin
Чувак в статье делал нормальные перфоманс тесты, посмотри.
сколько говорить что посмотрел уже )
Of course, your mileage will vary, but it’s definitely not 20-50x slower, and you shouldn’t have to worry about its performance when starting on a project1. The persistent vector also has a very low memory overhead, only slightly higher than the average memory overhead of an ArrayList.
до выводов дочитал?
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
я поэтому то и начал спрашивать как из этой статьи появился вывод что в clojure медленная работа с коллекциями
источник

ИИ

Искандер Искаков... in Clojure — русскоговорящее сообщество
Оффтоп: завидую терпению Кирилла.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Kirill Chernyshov
я поэтому то и начал спрашивать как из этой статьи появился вывод что в clojure медленная работа с коллекциями
Ну там есть перф тест который показывает что добавление в новую коллекцию в три раза медленнее
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Anton Chikin
Ну там есть перф тест который показывает что добавление в новую коллекцию в три раза медленнее
`Of course, your mileage will vary, but it’s definitely not 20-50x slower`
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Ладно, хрен с тобой. Ок, кложа супер быстрая и ест мало памяти.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Не стоит по этому поводу беспокоиться, берите, делайте любые проекты.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
transient даже не смотрите что такое - это для задротов
источник