Size: a a a

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

2020 January 10

KR

Kostyantin Randomname in Clojure — русскоговорящее сообщество
Заманивают в статическую типизацию
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
нас хрен заманишь!
источник

RM

Roman Melnikov in Clojure — русскоговорящее сообщество
Kostyantin Randomname
Заманивают в статическую типизацию
Кстати, есть какие-либо аннотации типов для кложуры и валидаторы типов как шаг сборки?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Roman Melnikov
Кстати, есть какие-либо аннотации типов для кложуры и валидаторы типов как шаг сборки?
clojure.typed есть. А так-то в кложе нет сборки
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Все просто последовательно читается и эвалуэйтится
источник

RM

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

RM

Roman Melnikov in Clojure — русскоговорящее сообщество
https://typedclojure.org
нашел спасибо!
источник

Д

Диёр in Clojure — русскоговорящее сообщество
Anton Chikin
clojure.typed есть. А так-то в кложе нет сборки
а вы у себя и спеки, и тайпед юзаете или только тайпед?
источник

RM

Roman Melnikov in Clojure — русскоговорящее сообщество
Anton Chikin
clojure.typed есть. А так-то в кложе нет сборки
правильно я понимаю, что типы в рантайме известны?
источник

AC

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

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Roman Melnikov
правильно я понимаю, что типы в рантайме известны?
Там есть вывод типов при компиляции в байткод, чтобы избежать вызовов через рефлексию. Ну и можно тупо спросить (type x) в рантайме. Кложа же сама на джаве написана - там у всего есть вполне конкретный тип
источник

RM

Roman Melnikov in Clojure — русскоговорящее сообщество
Anton Chikin
Там есть вывод типов при компиляции в байткод, чтобы избежать вызовов через рефлексию. Ну и можно тупо спросить (type x) в рантайме. Кложа же сама на джаве написана - там у всего есть вполне конкретный тип
спасибо, попытаюсь понять
источник

KR

Kostyantin Randomname in Clojure — русскоговорящее сообщество
Оно кор, прикольно
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
=> (type {:a 1 :b 2})
clojure.lang.PersistentArrayMap
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Этот класс вполне можно из джавы использовать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
(defn get-items
 []
 {:items [1 2 3]
  :has-more (rand-nth [true true false])})


(defn get-items*
 [prev-result]
 (-> (get-items)
     (assoc :continue? (not (false? (:has-more prev-result))))))


(->> (iterate get-items* nil)
    (drop 1)
    (take-while :continue?)
    (mapcat :items))
сорри, этот код не рабочий, так как mapcat не ленивый 🙄

рабочий вариант получился такой

(defn get-items
 []
 {:items [1 2 3]
  :has-more (rand-nth [true true false])})

(defn get-more-items
 [prev-result]
 (when (:has-more prev-result)
   (get-items)))

(defn lazy-mapcat
 [f coll]
 (lazy-seq
   (when (seq coll)
     (concat
       (f (first coll))
       (lazy-mapcat f (rest coll))))))

(->> (iterate get-more-items (get-items))
 (take-while some?)
 (lazy-mapcat :items))
источник

DF

Dima Fomin in Clojure — русскоговорящее сообщество
Привет всем!
А какой самый быстрый способ параллельного суммирования (reduce)  на сотне ядер?
У меня выходит, что DoubleAdder, и на втором месте - DoubleAdder однотредово.
источник

DF

Dima Fomin in Clojure — русскоговорящее сообщество
Столкнулся с тем, что в приложении в топ 5 пожирателей времени - шаг на котором параллельно через AtomicLong.compareAndSet обновляется некое значение - сумма показателя по миллионам контрактов. Тредов 99, и ядер 99. Отсюда видимо дикий thread contention.
Но при попытке синхронизации становится еще хуже. DoubleAccumulator/DoubleAdder - это лучший выход? Или есть еще варианты (очереди там, или еще чего)?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dima Fomin
Столкнулся с тем, что в приложении в топ 5 пожирателей времени - шаг на котором параллельно через AtomicLong.compareAndSet обновляется некое значение - сумма показателя по миллионам контрактов. Тредов 99, и ядер 99. Отсюда видимо дикий thread contention.
Но при попытке синхронизации становится еще хуже. DoubleAccumulator/DoubleAdder - это лучший выход? Или есть еще варианты (очереди там, или еще чего)?
в кложе для такого reducers придуманы
а так пробовать надо
источник

DF

Dima Fomin in Clojure — русскоговорящее сообщество
вот я поигрался, у меня получилось, что вот так быстрей всего на 4 домашних ядрах
источник