169 похожих чатов

Народ у меня такой вопрос Сложилось ощущение что на практике фп

скалы чаще предпочитают использовать дуби, даже меня самого дуби подкупила очень понятной
механикой работы. Но вот сегодня поковырял slick (начиная с версии 3)
И почему то не нашел ничего такого - что дуби дает чего нет в слике 3
Интреполяторы запросов есть не менее мощные в слике
можно юзать тот же tsql и он даже в компайлтайме проверяет что
sql-ка правильная, и маппинги проверяет (правда для этого требует
указать подключение к базе, к которой подрубается в компайл тайме)
дуби в этом случае дает check тесты.
и вот возникает вопрос почему на практике все таки дуби начали
охотнее завозить? или может все таки я не прав и слик все таки большинство юзает и предпочитает?

27 ответов

11 просмотров

В дуби есть F[_], на этом, имхо, его преимущества заканчиваются, и начинается конкатенация строк.

Mr.-Hash Автор вопроса
Aλiaksandr Siamionau
В дуби есть F[_], на этом, имхо, его преимущества ...

я вот тоже думаю slick не любят потому что никто не хочет писать Task.deferFromFuture(db.run(...)) А может ли вследствии этого теряться производительность? Типа slick всегда в Future выводится а дуби более универсальный Или если обернуть Future в Таску - то все будет ок?

Mr. Hash
я вот тоже думаю slick не любят потому что никто н...

В слике это всё тоже можно абстрагировать слоем сверху, никакой потери производительности на этой чепухе нет.

Mr. Hash
я вот тоже думаю slick не любят потому что никто н...

пишешь в фп стеке — пиши с фп либами, которые дизайнили под фп, такое вот правило пальца имхо

Aλiaksandr Siamionau
И на фп виртуальной машине :)

фп важно для программиста на уровне его взаимодействия с кодом, а не на уровне исполнения кода в ВМ или еще где

Mr.-Hash Автор вопроса
Aλiaksandr Siamionau
слик вполне себе фп

согласен странная логика говорить раз не F[_] то не ФП типа не служил не мужик)

Aλiaksandr Siamionau
слик вполне себе фп

val setupFuture = db.run(setup) футуры исполняются сразу и следовательно не соблюдают ссылочную прозрачность как минимум. Значит не фп (не в понимании «фп ето программирование с ФВП»)

Mr. Hash
согласен странная логика говорить раз не F[_] то н...

да хоть голое ИО/ЗИО/моникстаск, необязательно тф

Mr. Hash
Task.deferFromFuture(db.run(setup))

я это и имею в виду под «не задизайнено под фп-подход с сохранением СП» — надо каждый чих заворачивать в такое вот

Tachi Войцишевский
val setupFuture = db.run(setup) футуры исполняютс...

Частично согласен, но db.run вызывать самому необязательно. Это всё в прослойке (тонкой).

Tachi Войцишевский
фп важно для программиста на уровне его взаимодейс...

программист, который не шарит в том как исполняется код в ВМ, иногда пишет очень стрёмный в плане перформанса код два топ примера из практики на втором месте .toMap который вызывали на mutable кеше, который мог быть большой 10-20 мб, несколько сотен раз в секунду чтобы получить immutable Map там дальше ни на что это вообще не влияло убрать .toMap - минус 60 процентов primary allocation, минус 30 процентов загрузки прода (а прод тогда был 72 ядра) а на первом месте - lazy val за каким-то хером в теле метода, которая тогда (2.11 по-моему скала ещё была) автоматически становилась глобальным тред локом для всех тредов, которые этот метод вызывают так что фп важно для программиста all the way down

Tim
программист, который не шарит в том как исполняетс...

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

Tachi Войцишевский
ну там не совсем про это была реплика. Я говорил ...

а, ну по-моему достаточно посмотреть в имплементации скала коллекций с var и прочим

Mr.-Hash Автор вопроса
Tachi Войцишевский
ну там не совсем про это была реплика. Я говорил ...

while truшки в локальных методах это вполне себе ФП если я не ошибаюсь называется локализованный эффект

Mr.-Hash Автор вопроса
Aλiaksandr Siamionau
Частично согласен, но db.run вызывать самому необя...

есть ссылки где можно глянуть как это сделать? Я щас обычно фигачу везде deferFromFuture - не оч красиво

Mr. Hash
есть ссылки где можно глянуть как это сделать? Я щ...

Ты можешь вообще не писать нигде db.run. Например, можно репозитории автоматически переводить из DBIO в твой F. Например, если есть какой-то Repo trait UserRepo[F[_]] { def findUserByEmail(email: Email): F[Option[User]] } class UserRepoImpl(...) extends UserRepo[DBIO] { // ... } То, имея ~> выше, можно с помощью cats-tagless превратить твой UserRepo[DBIO] в UserRepo[F]. implicit val functorKUserRepo: FunctorK[UserRepo] = Derive.functorK[UserRepo] userRepoImpl.mapK(transact) И транзакции будут выполнять автоматически при покидании DB слоя.

Tim
программист, который не шарит в том как исполняетс...

Осталось только понять причём тут знание виртуальной машины

Vladislav Golub
Осталось только понять причём тут знание виртуальн...

вм как среды исполнения фп кода - в широком смысле, везде где это критично

Tim
вм как среды исполнения фп кода - в широком смысле...

если говорить про тайплевел/зио/моникс, то для «фп кода» там используется не сама жвм, а отдельный рантайм поверх нее (собственно ИО-ЗИО-Таск)

Tim
вм как среды исполнения фп кода - в широком смысле...

ну и описанные «беды» были и правда не с ВМ, а с деталями реализации стдлибы или языка

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Приветики всем!)) Подскажите: есть функция, которая записывает число типа Cardinal в четыре байта, хранимые в TBytes. Можете помочь мне, показав, как должна выглядеть функци...
Моринаро
5
Карта сайта