Fork me on GitHub
#clojure-russia
<
2017-01-11
>
ts150313:01:21

Прошу прощения за офтоп. У кого-нибудь есть желание выступить в феврале на митапе? https://www.meetup.com/Moscow-Clojure-Script-Meetup/events/236838714/

artemyarulin15:01:50

Хм, а в 1.9 ничего не завезли для убного дестрактинга namespace qualified keys?

(let [{:keys [name company]} {:customer/name 1 :customer/second-name 2 :customer/company 3}]
  name) ; =>  nil ибо ключи то все с префиксами

(let [{:keys [customer/name customer/company]} {:customer/name 1 :customer/second-name 2 :customer/company 3}]
  name) ;; => 1 робит но везде добавлять префикс ломает
очень же често хочется развернуть мапу в который везде одинаковые префиксы

artemyarulin15:01:21

пожалуйста не говорите что мне этого не надо 😄

niquola15:01:23

(let [m #:domain{:a 1, :b 2}
      {:domain/keys [a b]} m]
  [a b])

misha15:01:28

(let [{:company/keys [foo bar]} {:company/foo 1 :company/bar 2}]
  [foo bar])
=> [1 2]

misha15:01:48

фотофиниш!

artemyarulin15:01:16

ха, спасибо всем. В кложуре канале подсказали что префиксы перед мапой работают в обе стороны

(let [#:customer{:keys [name company]} #:customer{:name 1 :second-name 2 :company 3}]
  name)
развернется в тоже что и вы кинули

prepor15:01:27

@dottedmag откуда инфа про то что кийворды не убираются?

misha15:01:05

@artemyarulin не уверен, что выносить за биндинг мапу есть смысл, там же может быть еще всяких кивордов, типа

{:customer/keys [...] :as customer}

misha15:01:43

прийдется выключать через :_/as или как оно там делается

artemyarulin15:01:19

точно да, данкише, забыл про это

misha15:01:30

хотя это наверное к категории "каждый ###### как хочет" относится

prepor15:01:38

@dottedmag на сколько мне известно и на сколько я сейчас нагуглил кийворды и символы коллектятся в jvm (как и интернутые строки). прошу предоставить опровержение!

artemyarulin15:01:04

а еще тогда вдогонку вопрос

(let [{:keys [a b c]} {:a 1 :b 2 :c {:d 3}}]
  (let [{:keys [d]} c]
    [a b d]))
могу я как-нить d достать сразу в первом let? Вложить один keys в другой не выходит чота

prepor15:01:34

{{:keys [d]} :c :keys [a b]}

kronos_vano15:01:18

а почему не просто (let [{{d :d} :c} {:c {:d 1}}] (println d)) ? зачем эти keys

prepor15:01:22

ну а это уже кто как хочет

misha15:01:25

(let [{:keys [a b] {:keys [d]} :c} {:a 1 :b 2 :c {:d 3}}]
    [a b d])

prepor15:01:26

мне кийс нравятся

artemyarulin15:01:36

ну это пример маленький просто, а так с keys не надо повторять все по два раза два раза

prepor15:01:47

@misha ошибочка

misha15:01:00

свежачок из репла

prepor15:01:28

у меня в глазах двоится, сорянчик

misha15:01:33

да, и там порядок просто от твоего отличается

misha15:01:54

как раз и хотел сказать, что лучше уже спекой распотрошить, чем такое городить

prepor15:01:14

да нормал, нет тут никакого огорода особо

misha15:01:27

ну уже двоится жеж )

artemyarulin15:01:55

ну тут все однобуквенное, шумит сильно, на нормальных customer/product норм читается

misha16:01:22

возможно

misha16:01:34

PSA: есть еще :strs и :syms, для случаев, когда ключи строки и символы

niquola16:01:01

alias it as ::p/... ::c/...

misha16:01:38

ага, повыше-повыше в файле, чтобы забыть об этом )

artemyarulin16:01:58

алиасы не всегда можно - если я хочу customer/person то алиас потребует чтоб был файл такой

misha16:01:38

(create-ns 'customer)
(alias 'c 'customer)
(keys #::c {:foo 1})
=> (:customer/foo)

artemyarulin16:01:21

да это именно то что делает этот патч тока автоматом. Да не, костыльно как-то

dottedmag17:01:22

@prepor С "нагуглил" не поспоришь 🙂 В Keyword.java в самом верху отображение, и я не увидел, чтобы она где-то чистилась. Может и чистится, правда.

prepor17:01:04

@dottedmag какое отображение? https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Keyword.java вот вижу тут weakreference создается например

prepor17:01:16

вот топик в рассылке

dottedmag17:01:02

commit 5ee542d3de7e22d68e923c0f9c63267960cd1647
Author: Rich Hickey <[email protected]>
Date:   Thu Mar 3 08:46:31 2011 -0500

    switch keyword map to weak refs

dottedmag17:01:08

Теперь собирается, да. Пардон.

dottedmag17:01:23

Топик старый, в нём написано, что keywords не собираются, BTW.

prepor17:01:49

в топике написано что

prepor17:01:51

> I'm not sure this is correct. I think recent Sun JVMs can GC unreferenced, interned strings.

prepor17:01:57

> Right you are.

prepor17:01:29

впрочем в нынешнем коде я вообще ни вижу что бы использовались interned strings

dottedmag17:01:01

"Keyword objects are interned by Clojure and are not garbage collected. When a Keyword is created, it's placed in a ConcurrentHashMap that maps a Symbol of the same name and namespace to the Keyword object." вот это на момент написания было правдой.

dottedmag17:01:15

Больше не правда, всё собирается.

dottedmag17:01:25

А чем бы посмотреть, сколько джава поела heap'а?

dottedmag17:01:36

Выхлоп jstat мне ни о чём не говорит 🙂

prepor17:01:54

начиная с 1.2 версии, считай всегда

prepor17:01:01

в общем, разобрались

prepor17:01:12

jmx покажет

prepor17:01:41

точнее много тулзов которые через jmx покажут

prepor17:01:46

jmc например стандартная

dottedmag17:01:27

ага, спасибо.

dottedmag17:01:43

Да, если создать 10 миллионов ключей, а потом (System/gc), то память подскакивает, а потом обратно возвращается.

dottedmag21:01:13

Господа, а в чём разница между data.edn, clojure.edn и clojure.tools.reader.edn?

dottedmag21:01:20

Кто-то из них deprecated?

misha21:01:58

где ты нашел data.edn? и тулз

dottedmag22:01:02

В этом даже полгода назад чего-то фиксили: https://github.com/clojure/tools.reader/blob/master/src/main/clojure/clojure/tools/reader/edn.clj

misha22:01:41

дата выглядит протухшим, хотя может у него юзкейс другой: "A Clojure library for creation of edn data."

misha22:01:34

не гони, возьми транзит opieop

dottedmag22:01:15

Я не гоню, я читаю функции из читшита подряд 🙂

dragoncube22:01:29

мда, мне надо внимательнее отматывать чатик назад прежде чем отвечать на вопросы...