Cats-Effect 1.0.0 — IO monad(s) for Scala


#1

Salut,

Am lansat Cats-Effect, versiune 1.0.0.

Cats-Effect expune un tip de referință IO pentru Scala, ce permite programatorilor lucrul cu cod pur ce descrie efecte (suspendare de efecte secundare), similar modului în care se lucrează cu IO în Haskell, dar creat după capabilitățile mașinilor virtuale folosite cu Scala, adică JVM și JavaScript.

Mai multă documentație despre capabilitățile IO-ului din Cats-Effect puteți găsi pe website.

Proiectul mai expune deasemenea type classes pentru abstractizarea funcțiilor ce au nevoie de IO. Prin folosirea acestor clase în cod generic, putem folosi astfel:

  1. implementări alternative, precum Monix Task, ZIO sau Arrows
  2. combinații de monad transformers, proiectul oferind implementări de instanțe pentru OptionT, EitherT, StateT, WriterT, Kleisli.

Proiectul expune și primitive de concurență fundamentale, construite peste aceste type classes:

  • Ref — un AtomicReference pur
  • Semaphore — un semafor pur pentru sincronizare de procese asincrone
  • Deferred — un Promise pur, ca o variabilă write-only după care pot aștepta unul sau mai mulți consumatori
  • MVar — ca un BlockingQueue(size=1), un tip super util ce permite modelarea unor canale de comunicație producător-consumator clasice

În combinație cu alte librării din ecosistemul Typelevel, Scala este unul dintre puținele limbaje unde lucrul cu FP pur este posibil. Și distractiv.

Link-uri:

Anunț — și aș aprecia un retweet dacă puteți:


#2

Felicitari Alex, ma bucur ca ati ajuns la 1.0.0! As fi curios sa citesc un blog post despre cum a evoluat proiectul din perspectiva ta, sau macar despre experienta ta in OSS in general.


#3

Ar fi ceva.

Despre istorie, am scris un pic aici: https://monix.io/blog/2018/03/20/monix-vs-cats-effect.html

Ce a fost interesant la proiect este ca a fost început în mod explicit ca o colaborare. Și aici a fost o parte foarte socială, un pic extenuantă, față de codul tău propriu unde faci ce vrei fără griji.