Size: a a a

Scala User Group

2021 February 28

E

Elijah in Scala User Group
Λнтон Войцишевский
пишешь в фп стеке — пиши с фп либами, которые дизайнили под фп, такое вот правило пальца имхо
/toxic
источник

AS

Aλexander Semenov in Scala User Group
Возьмёшь дуби, замучаешься с конкатенацией, возьмёшь сверху quill, который компилит нерабочий код на раз-два. Будешь с теплотой вспоминать уютный слик, пусть не совсем с тру фп интерфейсом.
источник

БЁ

Борщевик Ёбаный... in Scala User Group
Как продать скаловый фп стек бизнесу, если там либы хуже качеством
источник

AS

Aλexander Semenov in Scala User Group
Λнтон Войцишевский
фп важно для программиста на уровне его взаимодействия с кодом, а не на уровне исполнения кода в ВМ или еще где
слик вполне себе фп
источник

Α

Αγβεκ in Scala User Group
Aλexander Semenov
слик вполне себе фп
согласен
странная логика говорить раз не F[_] то не ФП
типа не служил не мужик)
источник

Α

Αγβεκ in Scala User Group
DBIO это тоже монада
источник

Α

Αγβεκ in Scala User Group
и ленивая пока run не сделаешь - ничего не произойдет
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Aλexander Semenov
слик вполне себе фп
val setupFuture = db.run(setup)

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

ΛВ

Λнтон Войцишевский... in Scala User Group
Αγβεκ
согласен
странная логика говорить раз не F[_] то не ФП
типа не служил не мужик)
да хоть голое ИО/ЗИО/моникстаск, необязательно тф
источник

Α

Αγβεκ in Scala User Group
Λнтон Войцишевский
val setupFuture = db.run(setup)

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

ΛВ

Λнтон Войцишевский... in Scala User Group
Αγβεκ
Task.deferFromFuture(db.run(setup))
я это и имею в виду под «не задизайнено под фп-подход с сохранением СП» — надо каждый чих заворачивать в такое вот
источник

AS

Aλexander Semenov in Scala User Group
Λнтон Войцишевский
val setupFuture = db.run(setup)

футуры исполняются сразу и следовательно не соблюдают ссылочную прозрачность как минимум. Значит не фп (не в понимании «фп ето программирование с ФВП»)
Частично согласен, но db.run вызывать самому необязательно. Это всё в прослойке (тонкой).
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
что не добавляет удобства, нужно писать свои обертки
источник

Α

Αγβεκ in Scala User Group
IO.fromFuture(IO(db.run(setup)))
согласен хуже чем
setup.transact(tr)
Но зато check тесты не нужно писать и свои запросы тоже не надо везде копии плодить
источник

T

Tim in Scala User Group
Λнтон Войцишевский
фп важно для программиста на уровне его взаимодействия с кодом, а не на уровне исполнения кода в ВМ или еще где
программист, который не шарит в том как исполняется код в ВМ, иногда пишет очень стрёмный в плане перформанса код
два топ примера из практики
на втором месте .toMap который вызывали на mutable кеше, который мог быть большой 10-20 мб, несколько сотен раз в секунду чтобы получить immutable Map
там дальше ни на что это вообще не влияло
убрать .toMap - минус 60 процентов primary allocation, минус 30 процентов загрузки прода (а прод тогда был 72 ядра)

а на первом месте - lazy val за каким-то хером в теле метода, которая тогда (2.11 по-моему скала ещё была) автоматически становилась глобальным тред локом для всех тредов, которые этот метод вызывают

так что фп важно для программиста all the way down
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Tim
программист, который не шарит в том как исполняется код в ВМ, иногда пишет очень стрёмный в плане перформанса код
два топ примера из практики
на втором месте .toMap который вызывали на mutable кеше, который мог быть большой 10-20 мб, несколько сотен раз в секунду чтобы получить immutable Map
там дальше ни на что это вообще не влияло
убрать .toMap - минус 60 процентов primary allocation, минус 30 процентов загрузки прода (а прод тогда был 72 ядра)

а на первом месте - lazy val за каким-то хером в теле метода, которая тогда (2.11 по-моему скала ещё была) автоматически становилась глобальным тред локом для всех тредов, которые этот метод вызывают

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

T

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

Α

Αγβεκ in Scala User Group
Λнтон Войцишевский
ну там не совсем про это была реплика.
Я говорил о том, что ФП дает бенефиты именно на этапе чтения/написания/поддержки кода и архитектуры, а смысла фанатично требовать тру-фпшность на всех уровнях нет.
Поэтому например нормально внутри скаластд коллекций видеть вайлтру и прочие мутабельные штуки, и иметь вполне себе нетруфп-грязную-какещехотите жвм
while truшки в локальных методах это вполне себе ФП если я не ошибаюсь
называется локализованный эффект
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Αγβεκ
while truшки в локальных методах это вполне себе ФП если я не ошибаюсь
называется локализованный эффект
да, я про это и говорю
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Ссылочная прозрачность сохраняется на важном для разработчика уровне и отлично
источник