Monix v3.0.0-M1 Release Notes

Release Date: 2017-09-15 // over 6 years ago
  • ๐Ÿš€ This is a major release that breaks both binary and source ๐Ÿš€ compatibility. The major themes of this release:

    1. deep integration with Typelevel Cats
    2. the Iterant data type in a new monix-tail sub-project ๐Ÿ”จ 3. API refactoring, eliminated deprecations
    3. major improvements to Observable, Task and CancelableFuture

    Typelevel Cats integration:

    • PR #370: introduced Cats and cats-effect as direct dependencies
    • PR #377: added Cats related conversions, along with naming changes for consistency (e.g. renamed Coeval.Attempt to Coeval.Eager)
    • โšก๏ธ PR #387: updated Cats to 1.0.0-MF, removed deprecated functions and classes
    • PR #397: standardizes on Cats-related naming, removes Coeval's Comonad implementation
    • PR #398: re-adds instances for CoflatMap
    • PR #427: adds conversions from Cats to Observable

    ๐Ÿ†• New monix-tail sub-project, exposing monix.tail.Iterant[F[_], A]:

    • PR #280: introduces Iterant[F[_], A] for pull-based streaming based on Task / Coeval
    • PR #396: adds the Iterant.scan operator
    • PR #403: adds Iterant.foldWhileLeftL and Iterant.foldWhileLeftEvalL operators
    • PR #404: adds Iterant existsL, forallL, changes Observable.foldWhileL (breaking change)
    • PR #402: adds Iterant.foldRightL operator
    • PR #405: adds Iterant ops - findL, foldL, maxL, minL, reduceL
    • PR #407: adds Iterant ops - countL, distinctUntilChanged, distinctUntilChangedByKey
    • PR #412: adds scanEval on both Iterant and Observable
    • PR #411: another naming consistency change between Observable and Iterant
    • PR #413: Iterant.bufferSliding, bufferTumbling and batched operators
    • PR #417 and PR #418: Reactive Streams implementation for Iterant

    ๐Ÿ‘Œ Improvements for monix-execution and CancelableFuture:

    • PR #390: changes for flatMap on CancelableFuture to cancel all involved futures (thanks to @larsrh)
    • PR #395: adds Cats type class implementations for CancelableFuture
    • PR #431: improvements to CancelableFuture to get rid of memory leak, also adding utils like CancelableFuture.async
    • PR #432: further fixes to CancelableFuture, since describing a cancellable flatMap is a hard problem
    • PR #418: adds flip convenience method to AtomicBoolean (thanks to @Wogan)

    ๐Ÿ‘Œ Improvements for monix-reactive and Observable:

    • PR #391: makes Observable concatenation (++) stack safe
    • PR #408: changes for Iterant and Cats consistency (make use of Eq and Order type classes, add foldF and foldL, remove distinct and distinctByKey)
    • PR #368: added the Observable.intersperse operator (thanks to @omainegra)
    • PR #384: added contramap method to Callback (thanks to @Wogan)
    • PR #425: gets rid of ObservableLike, makes Observable an abstract class where the operators are final, Pipe no longer has Observable's operators, just transform

    ๐Ÿ‘Œ Improvements for monix-eval, Task and Coeval:

    • PR #410: Task and Coeval performance optimisations
    • PR #422: adds Task.shift, an innovation inspired by cats.effect.IO
    • PR #424: Task refactoring, gets rid of Task.OnFinish type alias
    • PR #430: Coeval and Task refactoring to the run methods for consistency, introduced map2, map3...map6 on both Task and Coeval, renamed zipMap* to parMap2, parMap3... parMap6 for Task

    ๐Ÿ— Administrative and build changes:

    • ๐Ÿ”ง PR #372: configured project for Git hash versioning (for enabling automatic releases)
    • PR #378: dropped Scala 2.10 support
    • ๐Ÿš€ enabled automatic deployments through Travis-ci, wrote a blog post documenting the necessarily steps, see Automatic Releases to Maven Central with Travis and SBT
    • โšก๏ธ PR #423: updates Scala.js to 0.6.20, the final in the series before 1.0.0