Releases: monix/monix
v3.0.0-RC3
Version 3.0.0-RC3 (June 16, 2019)
This release depends on Cats-Effect 1.3.1 and Cats 1.6.1.
The next planned release will target Cats-Effect 2.0.0 with Scala 2.13 support.
NOTE: this release IS NOT binary compatible with 3.0.0-RC2, as it contains some API changes, but it should be source compatible (with @deprecated symbols where the case).
Sub-project: monix-execution
This sub-project no longer depends on cats-effect and there are various
improvement to Local aimed at fixing interop with Future. Note that
you might have to call Local.isolate to disable any sharing between tasks.
-
PR #775: Simplified FutureUtils materialize & dematerialize
-
PR #790: improve fixed rate scheduling on JS
-
PR #803: Eagerly null out dequeued elements in ChunkedArrayQueue
-
PR #822: remove dependency on cats-effect from monix-execution
-
PR #773: change Cancelable.empty type to Cancelable
-
PR #887: Shared locals with binds
-
PR #888: Fix uncaught exception reporting for Scheduler
Sub-project: monix-catnap
-
PR #778: Adds ConcurrentChannel
-
PR #784: More concurrent tests for MVar/Semaphore
-
PR #865: Adding FunctionK values for Task, Coeval
Sub-project: monix-eval
-
PR #802: encapsulate local ctx on task execution
-
PR #807: Improve encapsulation test, encapsulate locals on ContextShift
-
PR #838: Add taskified variants of timeout combinators
-
PR #839: TaskLocal should propagate when used with Bracket Methods
-
PR #849: Specify exception on timeout
-
PR #887: Shared locals with binds
-
PR #865: Adding FunctionK values for Task, Coeval
Sub-project: monix-reactive
-
PR #759: Add Contravariant Observer and Subscriber
-
PR #760: add Observable.filterEval
-
PR #774: Add FunctorFilter instances for Iterant&Observable
-
PR #779: fork blocking i/o observable ops
-
PR #794: Acquire lock per subscription instead of observable-wide lock
-
PR #801: Observable buffers refactoring
-
PR #819: Extend ObservableLike with filterNot method
-
PR #831: SerializableSuite to no longer test Future for serializability
-
PR #834: Observable.reduce should emit for single item source
-
PR #846: Ensure mapParallelOrdered runs in parallel
-
PR #872: Add observable take while inclusive
-
PR #895: Fix memory leak in MapParallelOrderedObservable
Sub-project: monix-tail
Chores
-
PR #766: Update sbt-unidoc to 0.4.2
-
PR #766: Update sbt-pgp to 1.1.2
-
PR #768: Update sbt-mima-plugin to 0.3.0
-
PR #769: Update sbt-git to 1.0.0
-
PR #770: Update jctools-core to 2.1.2
-
PR #771: Update kind-projector to 0.9.8
-
PR #772: Update sbt-jmh to 0.3.4
-
PR #771: Update kind-projector to 0.9.9
-
PR #783: Use globally accessible (rather than local) source paths in JS source maps (#781)
-
PR #785: Update sbt-scalajs, scalajs-compiler, scalajs-library... to 0.6.26
-
PR #788: Update cats-effect, cats-effect-laws to 1.1.0
-
PR #796: fix scalacOptions
-
PR #797: Scala 2.12.8
-
PR #798: Update intervalWithFixedDelay scaladoc
-
PR #805: Rename keysBuffer to os in groupBy's parameters
-
PR #808: Update Copyright to 2019
-
PR #810: sbt 1.2.8 (was 1.1.0)
-
PR #812: Update Minitest to 2.3.2
-
PR #813: Disable code coverage
-
PR #818: Update Cats-Effect to 1.2.0
-
PR #820: Update cats-laws to 1.5.0
-
PR #821: Update cats-laws to 1.6.0
-
PR #823: Scala 2.13 support
-
PR #821: Update sbt-header to 5.1.0
-
PR #827: Remove comments from .jvmopts
-
PR #833: Fix build for 2.13.0-M5 by deactivating Mima for it
-
PR #840: Add adopters list seed
-
PR #842: Fixed deprecation docs for Task#coeval
-
PR #843: Remove dead code from tests
-
PR #844: Update sbt-header to 5.2.0
-
PR #847: Update ExecutionModel.scala
-
PR #850: Increase rate in AsyncSchedulerSuite
-
PR #854: fix apparently erronous code involving Unit companion
-
PR #855: Update sbt-jmh to 0.3.5
-
PR #857: Make benchmarks compile
-
PR #859: Update sbt-scalajs, scalajs-compiler to 0.6.27
-
PR #867: Update kind-projector to 0.10.0
-
PR #869: fix compile errors with latest Scala 2.13
-
PR #874: Update cats-effect, cats-effect-laws to 1.3.0
-
PR #878: Compile Benchmarks in CI
-
PR #879: Do on subscription cancel scaladoc fix
-
PR #889: Update cats-effect, cats-effect-laws to 1.3.1
-
PR #894: Add UnsafeBecauseImpure Annotation to foreach.
-
PR #896: Update cats-laws to 1.6.1
-
PR #898: Reformating via Scalafmt
-
PR #899: Fix autoCancelableRunLoops comment.
-
PR #901: avoid deprecated unicode arrow chars
-
PR #902: reformat build files
Thanks
People that made this release possible, in alphabetical order:
- Alexandru Nedelcu (@alexandru)
- Allan Timothy Leong (@allantl)
- Daniel Neades (@djneades)
- Dawid Dworak (@ddworak)
- Eugene Platonov (@jozic)
- Itamar Ravid (@iravid)
- Jorge (@jvican)
- Jorge Branco (@jorgedfbranco)
- Kenji Yoshida (@xuwei-k)
- Luke Stephenson (@lukestephenson)
- Matthew de Detrich (@mdedetrich)
- Mikhail Chugunkov (@poslegm)
- Oleg Pyzhcov (@oleg-py)
- Ota Hauptmann (@Otah)
- Piotr Gawryś (@Avasil)
- Roman Tkalenko (@tkroman)
- Ryo Fukumuro (@rfkm)
- Sam Guymer (@guymers)
- Seth Tisue (@SethTisue)
- Tanaka Takaya (@takayahilton)
- Yann Simon (@yanns)
And special thanks to our top contributor in this release:
https://github.com/fthomas/scala-steward :)
v3.0.0-M3
Final milestone release before the RC and the final and stable 3.0.0.
Highlights
Local and TaskLocal
Special thanks to Leandro Bolivar for implementing propagation of "local vars" (aka Local and TaskLocal, the equivalents of ThreadLocal, but for usage with Future and Task). The inspiration was com.twitter.util.Local and scala.util.DynamicVariable.
Right now the Monix Task is the only (known) IO data type for Scala that can work with such locals and because of the provided TracingScheduler, you can work with Scala's Future too.
See:
Pure cancellation, .start, .uncanceled, race
This release also lands a long awaited feature for Task — pure cancellation, aka Task.cancel. It's building on top of the current Task implementation, however it changes the API — e.g. in order to keep Task pure, the chooseFirstOf operator is now gone, being replaced with an equivalent racePair that operates with tasks and pure functions.
See:
Performance optimizations
One other highlight of the release are the performance improvements for Task and Coeval, an on-going process to make sure that Monix's Task remains the best implementation in Scala's ecosystem.
See:
Typelevel Cats
We now depend on Cats 1.0.1 and cats-effect 0.8.
This unblocks the 3.0.0 release, because Cats 1.x has stronger backwards compatibility guarantees.
Pull requests
- PR #464: updates dependencies, Scala to
2.12.4and2.11.12, JCTools to2.1.1, Minitest to2.0.0, Scala.js to0.6.21 - PR #462: Fix for
timeoutToto cancel source task directly after timeout - PR #444: Add
localContextPropagationtoTask.Options, implement tracingLocalvars - PR 470: increase test coverage
- PR #473: Fix issue where
fromAsyncStateActionis not safe for user code - PR #485 and PR #489: Updates Cats to
1.0.1and cats-effect to0.8 - PR #474:
Task/CoevalRun-loop Optimizations, First Batch - PR #492: Second batch of optimizations
- PR #494:
Task.cancelas a pure action, along with.start,.raceand.uncancelable
v2.3.3
Release is binary backwards compatible with series 2.3.x.
Bug fixes:
- Issue #468:
Observables created usingconcatdon't get canceled
(critical) - Issue #483:
stack overflow error onMVar.put - Issue #541:
observable.take(0)shouldn't subscribe to the source at all - Issue #475:
Observable.fromAsyncStateActiondoes not protect against
exceptions thrown in use code
Issue #468 in particular is pretty serious as it can lead to
resource leaks. Read the pull request
for more details.
Upgrade to 2.3.3 is recommended!
v3.0.0-M2
This release upgrades Cats to 1.0-RC1 and cats-effect to 0.5.
This involved changes to the exposed instances:
- the non-deterministic instance (e.g.
import Task.nondeterminism) is gone - integrated
cats.Parallelinstead, a new type class that's exposing an alternativeApplicativethat doesn't do ordering inapandmap2 Iterantnow exposesparZipandparZipMapfor doing zips in parallel, based oncats.Parallel
Enjoy!
v3.0.0-M1
This is a major release that breaks both binary and source compatibility. The major themes of this release:
- deep integration with Typelevel Cats
- the
Iterantdata type for lawful pull-based streaming, in a newmonix-tailsub-project - API refactoring, eliminated deprecations
- major improvements to
Observable,Task,CoevalandCancelableFuture
Typelevel Cats integration:
- PR #370: introduced Cats and
cats-effectas direct dependencies - PR #377: added Cats related conversions, along with naming changes for consistency (e.g. renamed
Coeval.AttempttoCoeval.Eager) - PR #387: updated Cats to
1.0.0-MF, removed deprecated functions and classes - PR #397: standardizes on Cats-related naming, removes
Coeval'sComonadimplementation - 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 onTask/Coeval - PR #396: adds the
Iterant.scanoperator - PR #403: adds
Iterant.foldWhileLeftLandIterant.foldWhileLeftEvalLoperators - PR #404: adds Iterant
existsL,forallL, changesObservable.foldWhileL(breaking change) - PR #402: adds
Iterant.foldRightLoperator - PR #405: adds
Iterantops -findL,foldL,maxL,minL,reduceL - PR #407: adds
Iterantops -countL,distinctUntilChanged,distinctUntilChangedByKey - PR #412: adds
scanEvalon bothIterantandObservable - PR #411: another naming consistency change between
ObservableandIterant - PR #413:
Iterant.bufferSliding,bufferTumblingandbatchedoperators - PR #417 and PR #418: Reactive Streams implementation for
Iterant
Improvements for monix-execution and CancelableFuture:
- PR #390: changes for
flatMaponCancelableFutureto cancel all involved futures (thanks to @larsrh) - PR #395: adds Cats type class implementations for
CancelableFuture - PR #431: improvements to
CancelableFutureto get rid of memory leak, also adding utils likeCancelableFuture.async - PR #432: further fixes to
CancelableFuture, since describing a cancellableflatMapis 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
Iterantand Cats consistency (make use ofEqandOrdertype classes, addfoldFandfoldL, removedistinctanddistinctByKey) - PR #368: added the
Observable.intersperseoperator (thanks to @omainegra) - PR #384: added
contramapmethod to Callback (thanks to @Wogan) - PR #425: gets rid of
ObservableLike, makesObservableanabstract classwhere the operators are final,Pipeno longer hasObservable's operators, justtransform
Improvements for monix-eval, Task and Coeval:
- PR #410:
TaskandCoevalperformance optimisations - PR #422: adds
Task.shift, an innovation inspired bycats.effect.IO - PR #424:
Taskrefactoring, gets rid ofTask.OnFinishtype alias - PR #430:
CoevalandTaskrefactoring to therunmethods for consistency, introducedmap2,map3...map6on bothTaskandCoeval, renamedzipMap*toparMap2,parMap3...parMap6forTask
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