TGViewer
Lil Functor Lil Functor @lilfunctor · 772 subscribers
Post #270 3.2K
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
More from @lilfunctor
  1. Apr 3, 2024Видео моего доклада «Как в Scala переложить JSON?» https://youtu.be/usp3Y0-VxwM?si=XwuewnR…
  2. Feb 27, 2024Как в Scala переложить JSON? В эту субботу буду выступать в Москве на Scala-митапе от Янде…
  3. Oct 22, 2023Конференция F[Scala] 🪜 Всем привет! Уже в следующую субботу в Москве пройдёт конференция…
  4. Feb 1, 2022sbt версий 1.6.0 и 1.6.1 был с багом: при ошибке инициализации фреймворка для юнит тестов…
  5. Jan 30, 2022Uber публично задокументировал свой подход к организации микросервисов — Domain-Oriented M…
  6. Jan 22, 2022C4 Model Меня сильно заинтересовали способы грамотной визуализации архитектуры программных…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →