Size: a a a

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

2020 November 05

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Вот здесь хорошее объяснение)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Вот кажется как будто не хватает функций в стандартной библиотеке)
в простых случаях можно обойтись pmap
просто у него cpu bound логика распараллеливания и нерегулируемая
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну вот да, вроде вообще не под эту задачу)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
в простых случаях можно обойтись pmap
просто у него cpu bound логика распараллеливания и нерегулируемая
также он тоже создаёт треды, что выглядит избыточным, когда ты работаешь с асинхронным интерфейсом (у которого под капотом свой тред пул)
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну в таком контексте понятно, но это кажется игрушкой
Ну суть кложи имхо - предоставить тебе максимально простую модель вычислений
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Anton Chikin
Ну суть кложи имхо - предоставить тебе максимально простую модель вычислений
Да я не против, просто вот тут нужен строгий map
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Можно наверное macros for использовать?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Да я не против, просто вот тут нужен строгий map
mapv есть
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Можно наверное macros for использовать?
doall есть
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Да я не против, просто вот тут нужен строгий map
тебе нужен асинхронный мап
то есть core.async/map 😊
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну мне говорят, что антипаттерн, наверное так и есть в какой-то степени)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
тебе нужен асинхронный мап
то есть core.async/map 😊
А это уже кажется слишком сложно
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну я подумаю, мб и core.async использую в итоге
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну мне говорят, что антипаттерн, наверное так и есть в какой-то степени)
  (->> (range 10)
      (mapv inc))
 
 (->> (range 10)
      (map inc)
      (doall))


ну просто второй вариант 1) медленнее 2) возвращает коллекцию возможно не того типа, что тебе нужно для работы 3) doall описано как для сайд эффектов, поэтому тут оно непонятно зачем

если не нравится mapv, можно так
  (->> (range 10)
      (into '() (map inc)))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
  (->> (range 10)
      (mapv inc))
 
 (->> (range 10)
      (map inc)
      (doall))


ну просто второй вариант 1) медленнее 2) возвращает коллекцию возможно не того типа, что тебе нужно для работы 3) doall описано как для сайд эффектов, поэтому тут оно непонятно зачем

если не нравится mapv, можно так
  (->> (range 10)
      (into '() (map inc)))
всякий раз, когда мне приходило в голову doall, находилось более подходящее решение
поэтому остаётся doall в репле, но для реализации ленивых коллекций в бенчмарках я чаще использую last
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
  (->> (range 10)
      (mapv inc))
 
 (->> (range 10)
      (map inc)
      (doall))


ну просто второй вариант 1) медленнее 2) возвращает коллекцию возможно не того типа, что тебе нужно для работы 3) doall описано как для сайд эффектов, поэтому тут оно непонятно зачем

если не нравится mapv, можно так
  (->> (range 10)
      (into '() (map inc)))
запуск фьючера ведь и есть сайд эффект по идее
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
запуск фьючера ведь и есть сайд эффект по идее
нет, это не в том смысле сайд эффект
есть функция чистая, которая возвращает результат вычисления
а есть функция, которая делает что-то другое и возвращает что-попало
в случае с future ты возвращаешь future, например простое (future 1)
ну это я так понимаю
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
запуск фьючера ведь и есть сайд эффект по идее
в нашем случае сайд эффектом является необходимость реализовать коллекцию на определённой стадии, чтобы алгоритм заработал как нужно
хак в некотором смысле, наводящий на мысль, что здесь что-то не так
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
нет, это не в том смысле сайд эффект
есть функция чистая, которая возвращает результат вычисления
а есть функция, которая делает что-то другое и возвращает что-попало
в случае с future ты возвращаешь future, например простое (future 1)
ну это я так понимаю
Я честно говоря не вижу тут большой разницы в определении "сайд-эффектов"
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да mapv все таки прямо вот сюда и нужен вроде
источник