Fork me on GitHub
#clojure-russia
<
2017-06-29
>
ilevd09:06:03

Есть функция parse-data которая парсит json файл и возвращает структуру, как можно сделать (def data (parse-data)) чтобы определялось во время компиляции? Я сделал так:

(defmacro def-data []
  (let [result (parse-data)]
    `(def data '~result)))

(def-data)
можно как-то короче?

artemyarulin10:06:28

т.е. ты хочешь инклуд по сути сделать?

ilevd10:06:08

Ну да, наверное

ilevd10:06:51

Т.е. именно во время компиляции из git сабмодуля взять данные

artemyarulin10:06:07

ну норм, я бы только вынес def data из самого макроса и возвращал данные оттуда тока. А в коде уже делал бы (def data (do-macro-magic) чтоб явно было, но это так, по мелочи

ilevd10:06:15

Я пытался, у меня не вышло) Там возвращается сложная вложенная структура с list-ами и они пытались вычислиться как функции

artemyarulin10:06:18

хм. а чо вообще кста не просто (def data (parse-data)) , зачем макро?

ilevd10:06:47

Так тоже пытался, он и во время компиляции вычисляется и потом во время рантайма

ilevd10:06:16

Это меня удивило)

artemyarulin10:06:27

да я удивлен тоже)

artemyarulin10:06:14

может кто тут ответит почему 2 раза? я чота теряюсь

ilevd10:06:13

"It must execute each expression at compile time because Clojure has macros, so subsequent expressions may depend on it at compile-time."

artemyarulin10:06:50

я чота думал он инициализирует все при компиляции и так оставляет, про второй раз не знал, хотя пример с get-current-time отлично показывает что оба раза надо да

ilevd11:06:04

(defmacro parse-data-compile-time []
  `'~(parse-data))

(def data (parse-data-compile-time))

ilevd11:06:36

Не самая легкая штука эти макросы

artemyarulin11:06:17

да дело привычки, там пару заклинаний типа

`'~ 
запомнить и ок

ilevd11:06:30

Вот в Nim просто const пишешь и он считает в compile time

artemyarulin11:06:56

даже если IO у тебя там?

ilevd11:06:07

С этим вроде нет

artemyarulin11:06:29

ну (def a 42) тоже все просто 🙂

artemyarulin11:06:03

как тебе Nim вообще? чо понравилось, чо нет?

ilevd11:06:15

Я совсем немного посмотрел)

ilevd11:06:24

Кстати насчет io не уверен, надо проверить

misha11:06:50

@ilevd что ж ты не в чатике нима тогда, а? kappa

artemyarulin11:06:51

Есть кста книжка про макросы на кложе https://pragprog.com/book/cjclojure/mastering-clojure-macros Она мелкая, зато сразу все понятно становится

artemyarulin11:06:18

@misha “ну чоты, нормально же общались“(с)

misha11:06:41

что-то нам прагпрог эту книжку и не отдал за призовое в кложакапе

ilevd11:06:45

@misha верю что еще инновации появятся))

artemyarulin11:06:58

ууу @ilevd счас тебе расскажут что кложура уже готова, ничего добовлять не надо, а если надо то ты сам макросы, блаблабла 😄

misha11:06:11

инновации типа contains? наконец-то будет искать элемент в векторе по значению? d

misha11:06:27

@artemyarulin опередил :)

artemyarulin11:06:55

а вот про contains? не смешно было

artemyarulin11:06:30

@misha на кложакапе кста чо сделали в итоге?

misha11:06:46

декатрон жеж

artemyarulin11:06:04

ааа, я не знал что ты там был. Или просто забыл, ну круто

misha11:06:09

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

artemyarulin11:06:47

https://github.com/clojure/clojure/pulse/monthly ээ, а Ричи там в гамаке просто ведь да? чота 0 комитов на месяц, в CLJS дак 117

misha11:06:26

ВСЁ ПРОПАЛО, КЛОЖА УМИрАЕТ! ВСЕ СРОЧНО В ЭЛМ

mike_ananev11:06:10

@misha сейчас это попадет в индекс, потом другие будут тыкать этим. вот так слухи и рождаются

misha11:06:34

рад уберечь комьюнити от таких tatatananana

artemyarulin11:06:01

ну мне тут грили что гугл тренд это не показатель, вот теперь гитхаб пульс тоже нет, я даже уже теряюсь 😄

mike_ananev11:06:10

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

artemyarulin11:06:25

зачетный доклад кста да ^^

misha11:06:40

про гитхаб пульс двумя абзацами выше гугель трендов говорилось

misha11:06:02

не смотрел, но одобряю поделись ссылочкой

mike_ananev11:06:08

@artemyarulin а что тебе от кложи нужно? на мой взгляд, там уже все есть. нужно только ускорить запуск, над performance поработать и спеку зарелизить

artemyarulin11:06:54

Типчики хочу! нет, не то… интероп не через жопу в CLJS!! а неа, Array.prototype.find(predicate) было б здорово 🙂

artemyarulin11:06:43

ну тут как со спекой - до того как Ричи ее придумал я и не знал что ее очень хочу. Теперь на других языках эту идею даже юзаю

misha11:06:02

Array.prototype.find(predicate) - это ж filter

artemyarulin11:06:46

(first (filter))

misha11:06:27

зсь сигнатура у метода тогда

ilevd11:06:44

Расширить стандартную библиотеку, добавить defconst

mike_ananev11:06:30

@ilevd это по поводу нововведений в cljs, ускоряющих перформанс?

ilevd11:06:32

И find с contains? на списки сделать)

ilevd11:06:55

Нет, вообще

mike_ananev11:06:24

если честно, то это все тянет на один раз написать функцию самому. на core языка это никак не влияет

ilevd11:06:55

Дак уже обсуждали, что сам пишешь функцию, используешь один раз, а потом в другие проекты не тянешь

mike_ananev11:06:54

я так понял, что core team как раз занимается фундаментальными проблемами языка. а механизм библиотек - это как раз userland, где кто во что горазд. уверен, у каждого из нас есть набор функций и макросов, которые мы из проекта в проект перетягиваем

mike_ananev11:06:03

оидна раз в кложар запулить

artemyarulin11:06:21

>это как раз userland, где кто во что горазд ну вот чот не уверен что эт прям так хорошо. С другой стороны конечно скала где все в ядре и ужосужос

mike_ananev11:06:59

ядро языка маленькое шустрое. библиотеку включил под конретные задачи, конкретного проекта. и все. нет ничего лишнего.

mike_ananev11:06:15

в другом проекте - другие задачи, другие либы.

mike_ananev11:06:45

и главное синтаксис устойчив как, от версии к версии в очень редких случаях что-то поломается

mike_ananev11:06:04

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

artemyarulin11:06:59

с другой стороны вот на тойже гошечке core.async по сути в ядре. Соответсвенно все(!) либы их юзают. В кложа мире у кого коллбеки, у кого core.async (а я мож не хочу!), у кого feature, или промисы или упаси оспади continuation monads или вообще все синхронное

artemyarulin11:06:19

т.е. плюсы есть когда ядро предоставляет фичи всеж

mike_ananev11:06:06

так в этом же огромный плюс - выбрать именно то, что отвечает задаче. и не ждать следующего релиза языка, если багу надо подправить или реализовать новую функциональность в асинхронной теме.

mike_ananev11:06:49

а континюэшн монады это уже болезнь.

fmnoise12:06:30

да ладно, CPS наше все, не?)

fmnoise12:06:31

@artemyarulin manifold вам всем)

artemyarulin12:06:00

оо, я его юзал когда aleph использовал, но чота так и не дочитал что это оказывается враппер над всеми асинхронными конструкциями

misha12:06:05

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

misha12:06:39

корасинк жеж не бесплатный, если у тебя 2 колбека - нафиг он нужен

mike_ananev17:06:38

в кафке появились транзакции: (start trx) ( send msg1) (send msg 2) (commit trx)

mike_ananev17:06:52

в кафке появилось exactly one гарантии

mike_ananev17:06:26

появился идемпотентный producer, то есть повторная отправка одних и тех же данных не дублирует данные в логе

mike_ananev17:06:54

и consumer теперь может читать или все или только закоммиченные сообщения

mike_ananev17:06:03

транзакции - 2 fase commit

mike_ananev17:06:47

оверхед на транзакции обещают 3-5% для 100ms транзакций, 1КБ сообщения

mike_ananev17:06:57

Эта вся вкуснота появилась 0.11.0.0 is the latest release.

rustam.gilaztdinov20:06:28

А что за библиотека?

rustam.gilaztdinov21:06:44

Подумал, речь о какой-то библиотеке, не о самой кафке dafuq picard-facepalm