Size: a a a

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

2020 February 27

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Azamat Kalimoulline
Ну если по ним фильтровать нужно, то надо. По кейвордам оно идёт гораздо быстрее, чем по строкам.
я в код не смотрел, а только догадываюсь, что кейворды интернятся и если разбирать штуки вида
[{"UUID....":"value"}, .... ]
то можно здорово подзасрать память
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
поправьте, если это не так.
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
Интересно, можно ли убить сервер на clojure, если посылать очень много json'ок с рандомными ключами? Или clojure подчищает неиспользуемые keyword'ы?
нельзя, они гарбейдж коллектятся
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Andrew Rudenko
нельзя, они гарбейдж коллектятся
а где именно?
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
вот эта табличка, как я понимаю
private static ConcurrentHashMap<Symbol, Reference<Keyword>> table = new ConcurrentHashMap();
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
да. и кейворд туда добавляется как WeakReference
источник

AR

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

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
ага, вик рефренс нашел
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
а сама табличка подчищается тут https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Util.java#L205
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
всем привет.
задачка, подскажите
есть вектор [{"text": "123", "type": "postal"} {"text": "789" "type": "physical"}]
как оптимально достать только элемент с type="postal"
все или только первый попавшийся?
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
Sergey Trofimov
все или только первый попавшийся?
Принцип я понял, что если несколько вхождений, то все вернет. Я на всякий FIRST его
источник

V0

Vlad 0xcd55d8db in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
Интересно, можно ли убить сервер на clojure, если посылать очень много json'ок с рандомными ключами? Или clojure подчищает неиспользуемые keyword'ы?
Дай угадаю, рубист-старообрядец?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
Принцип я понял, что если несколько вхождений, то все вернет. Я на всякий FIRST его
если нужен первый, то можно так
(some #(when (#{"postal"} (:type %)) %)
   [{:text "123" :type "postal"}
    {:text "789" :type "physical"}])

чтобы не обходить весь список
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Vlad 0xcd55d8db
Дай угадаю, рубист-старообрядец?
Нет. Под common lisp есть система, которая занимается парсингом json'ов и в качестве ключей, по умолчанию, используются keyword'ы. Так вот там они не чистятся и сервер, который использует эту систему, можно убить таким образом, как я написал.
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Vlad 0xcd55d8db
Дай угадаю, рубист-старообрядец?
Руби не знаю совсем.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
Принцип я понял, что если несколько вхождений, то все вернет. Я на всякий FIRST его
(defn having-type
 [type]
 (fn [obj]
   (when (= (:type obj) type) obj)))
=> #'dev.playground/having-type
(some (having-type "postal")
   [{:text "123" :type "postal"}
    {:text "789" :type "physical"}])
=> {:text "123", :type "postal"}
(some (having-type "physical")
   [{:text "123" :type "postal"}
    {:text "789" :type "physical"}])
=> {:text "789", :type "physical"}
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
Sergey Trofimov
(defn having-type
 [type]
 (fn [obj]
   (when (= (:type obj) type) obj)))
=> #'dev.playground/having-type
(some (having-type "postal")
   [{:text "123" :type "postal"}
    {:text "789" :type "physical"}])
=> {:text "123", :type "postal"}
(some (having-type "physical")
   [{:text "123" :type "postal"}
    {:text "789" :type "physical"}])
=> {:text "789", :type "physical"}
Спасибо, Сергей. Вариант some тоже интересный
источник

MV

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

VK

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

MV

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