Size: a a a

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

2021 September 11

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
на ней еще можно пилить библиотеку, но именно проект -- задолбаешься, будут конфиги по три экрана
источник

DB

Dmitry Bushenko in Clojure — русскоговорящее сообщество
да, похоже на то
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
https://clojure.org/news/2021/07/30/deref
Extending abstract base-class dynamically (i.e. reify-class)
источник

AG

Anton Garansky in Clojure — русскоговорящее сообщество
Где-то видел, что иногда методам протоколов добавляют -.
Как-то так:

(defprotocol Column
   (-sort [_] ))

Вроде удобно когда в неймспесе есть еще функции.
Что думаете? Я что-то не могу naming covention на эту тему.
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
В этом случае часто еще бывает функция sort, которая вызывает -sort. И делает некую общую логику для всех реализаций протокола.
источник

AG

Anton Garansky in Clojure — русскоговорящее сообщество
Вот получается, что -sort как-бы вспомогательный и другие неймспейсы используют.
А мне казалось, что кейс как раз такой, что -sort все таки используется извне, но так мы показываем что вызываем не просто функцию из не неймспеса а метод протокола.
К сложе один фиг всё функции и мапы, поэтому и изголяемся с именами🤔
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Нет, нету такого соглашения для именования методов протоколов
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
использование протоколов похоже на использование мультиметодов
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
если посмотреть, например, в (ns clojure.core.protocols), то там такое
(defprotocol CollReduce
 (coll-reduce [coll f] [coll f val]))

(defprotocol InternalReduce
 (internal-reduce [seq f start]))

(defprotocol IKVReduce
 (kv-reduce [amap f init]))

(defprotocol Datafiable
 (datafy [o]))

(defprotocol Navigable
 (nav [coll k v]))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Это для того, чтобы была общая точка входа, где можно сделать общие проверки до того, как передать управление протоколу
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Например, бросить исключение для неверных параметров. Если копировать этот код во все протоколы, то будет некрасиво
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
В кложе есть способ объявлять джава-классы, только не в полете, а на этапе lein compile. И позже импортировать их как обычные классы
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
У нас например, для кафка-стрим написан класс на кложе. Путь к этому классу принимает читатель кафки
источник

AG

Anton Garansky in Clojure — русскоговорящее сообщество
ага, значит в итоге из-за банального конфликта имен такие ухищрения
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
это сигнал к тому, чтобы вызывать функцию, а не протокол, который начинается с -
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
т.е. функция несет что-то большее, нежели реализация протокола
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
так часто делают.  есть модуль с протоколами, есть расширение протокола, и есть модуль с конечными API для пользвателя
источник

AG

Anton Garansky in Clojure — русскоговорящее сообщество
👍
источник
2021 September 12

PM

Pavel Meledin in Clojure — русскоговорящее сообщество
Вопрос про монорепы: Какую структуру и какими тулами наиболее практично в Clojure это делать? В проекте планируется бек и фронт на Clojure (Script). Часть (или все) сервисов будет важным собирать Graal’ем.

Может есть какие-то рекомендованные статьи на тему или прям готовые решения ?

Нагуглил: lein-monolith но не знаю насколько это практично. Смотрел про polylith но нет уверенности что вот прям то что необходимо, плюс не покрывает фронт как я понял.

Все варианты готов рассмотреть. Благодарю
источник

MB

Mikhail Beliansky in Clojure — русскоговорящее сообщество
deps.edn заточен под них хорошо, можно указывать в зависимостях соседние папки
источник