L
Lil Functor
@lilfunctor855 подп.
3.1Kпросмотров
6 февраля 2022 г.
Score: 3.5K
Kit Langton, автор макроса для автовайринга ZLayer, отметился в любопытном пропозале на форуме разработчиков компилятора Scala. В пропозале обсуждается синтаксический сахар для аппликативной композиции по аналогии с for-comprehension для монадок. Если сильно упрощать смысл аппликативных вычислений до наиболее частого практического применения — это вычисление нескольких эффектов параллельно и сбор результатов в одном месте (академики, не ругайтесь). Сейчас в популярных библиотеках параллельные вычисления описываются вспомогательными функциями, и это не особо удобно в реальности, когда собрать надо с десяток значений: ZIO.mapParN(fetchName, fetchAge)((name, age) => User(name, age)) А программисты хотят синтаксического сахарка, как если бы вычисления были последовательными: afor { name <- fetchName age <- fetchAge } yield User(name, age) В предложенном варианте меньше бросается в глаза, что вычисления побегут в параллель, но читается он гораздо лучше. В Haskell такое расширение компилятора уже реализовано и выглядит довольно симпатично. Так вот, Kit написал работающий PoC макроса, который даёт такой синтаксис без доработок компилятора. Пока только для ZIO. par { for { name <- fetchName age <- fetchAge } yield User(name, age) } Макрос строит граф вычислений из обёрнутого for-comprehension, топологически его сортирует и параллелит всё, что можно. Утилита уже сейчас выглядит привлекательно, и может быть её втащат в ZIO, как это уже было с zio-magic. https://github.com/kitlangton/parallel-for
3.1K
просмотров
1536
символов
Нет
эмодзи
Нет
медиа

Другие посты @lilfunctor

Все посты канала →
Kit Langton, автор макроса для автовайринга ZLayer, отметилс — @lilfunctor | PostSniper