Size: a a a

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

2020 January 03

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
compile слишком расплывчато и нужно вызывать его с неймсейсом, вроде e/compile, чтобы было понятно как компилируется
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
пока break -> with-effects лучше подходит ИМХО
Код же не выполняется, а превращается в код для интерпретатора?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
Код же не выполняется, а превращается в код для интерпретатора?
ну тут скользкий момент
там внутри стейт-машина, а это обычная функция с мутабельным состоянием внутри
т.е. это не структуры данных, а именно функция
если интересны подробности, то я использую вот эту библиотеку https://github.com/leonoel/cloroutine
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
compile слишком расплывчато и нужно вызывать его с неймсейсом, вроде e/compile, чтобы было понятно как компилируется
Всё, кроме коре, желательно вызывать с неймспейсом :-)
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
Всё, кроме коре, желательно вызывать с неймспейсом :-)
главное refer all не делать =)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
ну тут скользкий момент
там внутри стейт-машина, а это обычная функция с мутабельным состоянием внутри
т.е. это не структуры данных, а именно функция
если интересны подробности, то я использую вот эту библиотеку https://github.com/leonoel/cloroutine
Возвращается что-то, что нужно позвать. Поэтому with не очень подходит
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
compile слишком расплывчато и нужно вызывать его с неймсейсом, вроде e/compile, чтобы было понятно как компилируется
Зато отражает суть
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
Возвращается что-то, что нужно позвать. Поэтому with не очень подходит
по хорошему нужно сделать свои макросы, вроде fn! и defn!
но это очень сложно, и я не готов это делать, пока не нашел приемлемого способа
тут уже подсказывали на этот счет и давали пример, но я не готов это использовать и проще оставить отдельно fn/defn и with-effects
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
Возвращается что-то, что нужно позвать. Поэтому with не очень подходит
with-effects чем-то напоминает io! https://clojuredocs.org/clojure.core/io%21
io! тоже оборачивает тело функции
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
по хорошему нужно сделать свои макросы, вроде fn! и defn!
но это очень сложно, и я не готов это делать, пока не нашел приемлемого способа
тут уже подсказывали на этот счет и давали пример, но я не готов это использовать и проще оставить отдельно fn/defn и with-effects
плюс, я не исключаю ситуации, когда в мультиарной функции один вариант будет с эффектами, а другой - без
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
with-effects чем-то напоминает io! https://clojuredocs.org/clojure.core/io%21
io! тоже оборачивает тело функции
вот и назови effects! 😊
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
вот и назови effects! 😊
спасибо
а как тебе подход в целом?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
пока break -> with-effects лучше подходит ИМХО
по мне лучше с глаголом: do-effects, wrap-effects
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
по мне лучше с глаголом: do-effects, wrap-effects
глядя на код wrap-effect выглядит предпочтительней
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
принимает 3 разных типа:
1) результат выполнения функции с эффектами, чтобы их можно было друг из друга вызывать
2) эффект напрямую
3) любое другое значение для обратной совместимости
вместо повторяющегося (! (effect ...)) напрашивается (effect! ...)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
принимает 3 разных типа:
1) результат выполнения функции с эффектами, чтобы их можно было друг из друга вызывать
2) эффект напрямую
3) любое другое значение для обратной совместимости
и вообще имя ! выглядит неудачно
даже глядя на её исходник, непонятно, что это
похоже на враппер 😊
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Sergey Trofimov
и вообще имя ! выглядит неудачно
даже глядя на её исходник, непонятно, что это
похоже на враппер 😊
! - это в каком-то смысле аналог core.async/<!
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
И на исходник тут смотреть не особо нужно.
Нужно смотреть на (cr {! i/coeffect} ~@body) https://github.com/darkleaf/effect/blob/master/src/darkleaf/effect/core.cljc#L19
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
compile слишком расплывчато и нужно вызывать его с неймсейсом, вроде e/compile, чтобы было понятно как компилируется
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
да, и но это деталь реализации
были бы continuations в jvm - не было бы компиляции
а судя по всему в project loom  континуации сдеалют приватными
источник