Size: a a a

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

2021 January 28

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Kirill Chernyshov
но она (core.async) тоже на макросах почти полностью )
как без их понимания в ошибках разбираться?
Ну я про то, что core.async писали умные опытные дядьки.

А новичку ознакомиться с макросами стоит, но писать самому для реального кода не стоит первые года полтора — как я это вижу.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alexey Cheremisin
я про треды и спрашиваю, может какой сахар есть?
future
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Timur Latypoff
Ну я про то, что core.async писали умные опытные дядьки.

А новичку ознакомиться с макросами стоит, но писать самому для реального кода не стоит первые года полтора — как я это вижу.
а почему такой строгий интервал?
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Kirill Chernyshov
а почему такой строгий интервал?
Если бы я написал "через достаточно разумное время можно" — кто-то подумает: "я уже две недели изучаю — разумно, что уже можно". Всё-таки побольше времени должно пройти.
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Timur Latypoff
Если бы я написал "через достаточно разумное время можно" — кто-то подумает: "я уже две недели изучаю — разумно, что уже можно". Всё-таки побольше времени должно пройти.
ну можно же еще две недели поизучять кложуру, и через год-полтора без практики начать изучать макросы )
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
сорян за оффтоп, просто интересно как число появилось
источник

LL

Lama Lover in Clojure — русскоговорящее сообщество
Хочется согласиться с тем, что не стоит писать макросы первое время, но не получается, потому что есть реальный пример, где простые и понятные макросы в лисповом виде решили судьбу платформы

Сейчас уже практически никто не начинает новые проекты на Erlang, а все используют Elixir именно из-за тех преимуществ, которые являются следствием макросов в Elixir.

При этом, макросы пишут все: от мала, до велика, и у всех получается +/- нормально. Понятное дело, что новички пишут плохие макросы, но такую вещь как "плохой макрос" всегда можно легко отловить на кодревью, это видно глазом, для этого не нужно исполнять код в голове
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Lama Lover
Хочется согласиться с тем, что не стоит писать макросы первое время, но не получается, потому что есть реальный пример, где простые и понятные макросы в лисповом виде решили судьбу платформы

Сейчас уже практически никто не начинает новые проекты на Erlang, а все используют Elixir именно из-за тех преимуществ, которые являются следствием макросов в Elixir.

При этом, макросы пишут все: от мала, до велика, и у всех получается +/- нормально. Понятное дело, что новички пишут плохие макросы, но такую вещь как "плохой макрос" всегда можно легко отловить на кодревью, это видно глазом, для этого не нужно исполнять код в голове
Ну в конкретном примере, вместо

(defmacro with-thread
 [& body]
 `(let [thread# (new Thread (fn [] ~@body))]
    (.start thread#)
    thread#))

(def t (with-thread (println 42)))

(.join t)


Лучше писать:

(defn make-thread
 [body]
 (let [t (new Thread body)]
    (.start t)
    t))

(def t (make-thread #(println 42)))

(.join t)


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

Поэтому новичкам лучше не писать макросы. А то им дай молоток в руки — они будут им пользоваться постоянно.
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Я не говорю, что Иван новичок. Уверен, он знает, что делает.
Я говорю, нехорошо, что Иван новичку предлагает писать макросы вместо изучения core.async
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
ладно, а как новичку понять что вот уже можно писать макросы?
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Kirill Chernyshov
ладно, а как новичку понять что вот уже можно писать макросы?
Когда борода до сосков достаёт, либо лысина до ушей — уже можно :)
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
)))
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
значит мне рано)
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Kirill Chernyshov
значит мне рано)
Мне тоже, это норма)
Поэтому стараюсь избегать написания)
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
о, а что насчет примера что я кидал вчера? так можно? это не макрос )
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Timur Latypoff
Ну в конкретном примере, вместо

(defmacro with-thread
 [& body]
 `(let [thread# (new Thread (fn [] ~@body))]
    (.start thread#)
    thread#))

(def t (with-thread (println 42)))

(.join t)


Лучше писать:

(defn make-thread
 [body]
 (let [t (new Thread body)]
    (.start t)
    t))

(def t (make-thread #(println 42)))

(.join t)


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

Поэтому новичкам лучше не писать макросы. А то им дай молоток в руки — они будут им пользоваться постоянно.
а ещё лучше
(defn make-thread
 [body]
 (doto (new Thread body)
   (.start)))

😊
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Kirill Chernyshov
например вот такие штуки разбирать легче после SICP
(def fib `(0 1 ~@(lazy-seq (map +' fib (next fib)))))
вот этот
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Kirill Chernyshov
ладно, а как новичку понять что вот уже можно писать макросы?
когда он точно видит, что с макросом будет лучше, невзирая на рекомендацию избегать макросов 😊
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Sergey Trofimov
когда он точно видит, что с макросом будет лучше, невзирая на рекомендацию избегать макросов 😊
👍
источник

TL

Timur Latypoff in Clojure — русскоговорящее сообщество
Ага). Это как дзен всякий. Как понять, что ты достиг просветления?)
источник