Applicative for
Kit Langton, автор макроса для автовайринга
ZLayer, отметился в любопытном
пропозале
на форуме разработчиков компилятора Scala. В пропозале обсуждается
синтаксический сахар для аппликативной композиции по аналогии с
for-comprehension
для монадок. Если сильно упрощать смысл аппликативных
вычислений до наиболее частого практического применения – это вычисление
нескольких эффектов параллельно и сбор результатов в одном месте (академики, не
ругайтесь).
Сейчас в популярных библиотеках параллельные вычисления описываются вспомогательными функциями, и это не особо удобно в реальности, когда собрать надо с десяток значений:
А программисты хотят синтаксического сахарка, как если бы вычисления были последовательными:
В предложенном варианте меньше бросается в глаза, что вычисления побегут в параллель, но читается он гораздо лучше. В Haskell такое расширение компилятора уже реализовано и выглядит довольно симпатично.
Так вот, Kit написал работающий PoC макроса, который даёт такой синтаксис без доработок компилятора. Пока только для ZIO.
Макрос строит граф вычислений из обёрнутого for-comprehension
, топологически
его сортирует и параллелит всё, что можно. Утилита уже сейчас выглядит
привлекательно, и может быть её втащат в ZIO, как это уже было с zio-magic.
https://github.com/kitlangton/parallel-for