Fork me on GitHub
#clojure-russia
<
2016-05-29
>
misha05:05:44

парни, а может ли кто объяснить, почему эти 2 макроса - макросы, а не функции? в чем профит?

(ns natal-shell.data-source)

(defmacro data-source [config]
  `(js/React.ListView.DataSource. (cljs.core/clj->js ~config)))

(defmacro clone-with-rows [ds rows]
  `(.cloneWithRows ~ds (cljs.core/clj->js ~rows)))

maxp05:05:38

весьма вероятно, уменьшается оверхед

artemyarulin05:05:38

clj->js вроде тож макрос?

artemyarulin05:05:03

можно юзать #js, но оверхед в рантайме (ктот грил что даже заметный)

misha05:05:36

(defn clj->js

misha05:05:20

@maxp: типа стек вызовов меньше?

maxp05:05:33

это же все потом компиляется умным компилятором

maxp05:05:06

а тутявно виден вызов нативного метода

maxp06:05:02

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

misha06:05:37

(defmacro m [config]
  `(cljs.core/clj->js ~config))

(defn f [config]
  (cljs.core/clj->js config))

(time (dotimes [n 1000000]    (m {:rowHasChanged not=})))

(time (dotimes [n 1000000]    (f {:rowHasChanged not=})))
"Elapsed time: 586.145000 msecs"
"Elapsed time: 1390.510000 msecs"

misha06:05:53

а если еще и вызов нативного метода оптимизируется - ухх

maxp06:05:11

видимо я угадал 🙂

misha06:05:14

с другой стороны:

misha06:05:53

n = 10
"Elapsed time: 1.145000 msecs"
"Elapsed time: 1.185000 msecs"

misha06:05:58

пофиг вообще

maxp06:05:23

так надо аккуратно мерить

misha06:05:14

ну понятно, просто в контексте мобилочки, юзер тыкнул 2 раза в секунду, 5-10 раз clj->js по стеку где-то вызвалось - 2ms

maxp06:05:09

зависит от задачи, понятное дело

artemyarulin06:05:45

#js попробуй еще

artemyarulin06:05:45

про core.spec нашел статейку небольшую http://tales.sveri.de/posts/2016-05-28-clojure-spec.html, чота как-то шумновато по мне(

misha06:05:13

а в #js нужно аккуратно передавать штуки? или это литерал для clj->js ?

misha06:05:31

в смысле: результат у них идентичный?

artemyarulin06:05:59

а кстати да - уже не помню но один из них рекурсивно все сконвертит, другой (#js наверно) тока top levels

misha06:05:18

а, да, #js надо руками на каждом уровне писать

misha06:05:20

считаю, что спека лучше призматик схемы. плотно не работал ни с той, ни с той kappa

misha06:05:31

но общий регистр спек на все ключи - это найс вообще.

misha07:05:42

(def ReactNative (js/require "react-native"))

(defn- data-source [config]
  (let [ds (.. ReactNative -ListView -DataSource)]
    (new ds (clj->js config))))

misha07:05:33

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

(.-ListView.-DataSource. ReactNative (clj->js config))

savelichalex07:05:16

парни а вы что для навигации в RN юзаете?

slava_nedorezov08:05:00

написал в #C0D2M7JEN , но там все молчат я раньше для javascript использовал VSCode. Сейчас заинтересовался Clojure, хотел его тоже писать в vscode, но никак не разберусь как прикрутить отладку и репл. Есть кто пользуется? хочется одновременно видеть и консоль вывода и окно репла... или проще использовать какойнить многоконный ConEmu или tmux?

niquola09:05:05

emacs (spacemacs), vim, cursive (idea), light-table

niquola09:05:26

все умеют, каждый немного посвоему

bernik09:05:36

@slava_nedorezov: если исходить из того, что vscode на электроне, то посмотри на атом с proto-repl. дебага дам нет(он по ходу только в emacs) а репл в отдельной вкладке получается, в отдельной группе. получается редактор разделен на две части - в одной код, в другой - репл. дебаг может уже cursive научился, не смотрел давно на него.

bernik10:05:13

я не помню, а как в этом чатике отнеслись к clojure.spec? планируете внедрять себе или schema/core.typed?

savelichalex10:05:28

я бы попробовал, учитывая что многие prismatic schema юзают) а кстати есть классное чтиво по тому как schema (ну и собственно теперь уже spec) юзать?

savelichalex13:05:40

@misha: я вот че то тоже пока на нем остановился, написал только небольшую обертку чтобы с re-frame нормально ложилось) а я правильно понял что хэдер можно только либо для всех сцен, либо никак?

misha13:05:08

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

leov22:05:44

гм. а вопрос - датаскрипт можно грузить в каком-нибудь веб-воркере, а потом передать в основной контекст?

leov22:05:04

я правильно понимаю, что никакие фичи вроде этой не помогут? https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast?hl=en