Changelog History
Page 1
-
v3.0.0-M6 Changes
November 30, 2020π FS2 3.0.0-M3 is the fourth milestone in the 3.x release series, featuring support for Cats Effect 3. Like Cats Effect 3, we expect a number of milestone releases before a 3.0.0 final release. Neither binary nor source compatibility with FS2 2.x is provided, though APIs are largely the same and porting should not be a large task.
π The primary feature of FS2 3.0 is support for the Cats Effect 3 type class hierarchy. The Cats Effect 3.0.0-Mx release notes provide a great overview of the changes.
π If you're coming from FS2 2.x, be sure to check out the release notes for v3.0.0-M1.
π The primary changes in this release are:
π Support for Scala 3.0.0-M2
git shortlog -sn --no-merges "v3.0.0-M3".."v3.0.0-M6" 12 Scala Steward 9 Michael Pilquist 5 mpilquist 4 Diego E. Alonso Blas 1 anikiforov 1 Lars Hupel 1 Channing Walton 1 Gabriel Volpe 1 Akhtiam Sakaev
-
v3.0.0-M5
November 28, 2020 -
v3.0.0-M4
November 28, 2020 -
v3.0.0-M3 Changes
November 09, 2020π FS2 3.0.0-M3 is the third milestone in the 3.x release series, featuring support for Cats Effect 3. Like Cats Effect 3, we expect a number of milestone releases before a 3.0.0 final release. Neither binary nor source compatibility with FS2 2.x is provided, though APIs are largely the same and porting should not be a large task.
π The primary feature of FS2 3.0 is support for the Cats Effect 3 type class hierarchy. The Cats Effect 3.0.0-Mx release notes provide a great overview of the changes.
π If you're coming from FS2 2.x, be sure to check out the release notes for v3.0.0-M1.
π The primary changes in this release are:
- π Support for Scala 3.0.0-M1
π All dependencies are natively built for Scala 3.0.0-M1 now (no _2.13 cross builds)
git shortlog -sn --no-merges "v3.0.0-M2".."v3.0.0-M3" 56 Fabio Labella 12 Michael Pilquist 9 Domas Poliakas 9 Scala Steward 8 Diego E. Alonso Blas 7 mpilquist 2 Diego E. Alonso-Blas
-
v3.0.0-M2 Changes
October 23, 2020π FS2 3.0.0-M2 is the second milestone in the 3.x release series, featuring support for Cats Effect 3. Like Cats Effect 3, we expect a number of milestone releases before a 3.0.0 final release. Neither binary nor source compatibility with FS2 2.x is provided, though APIs are largely the same and porting should not be a large task.
π The primary feature of FS2 3.0 is support for the Cats Effect 3 type class hierarchy. The Cats Effect 3.0.0-M2 release notes provide a great overview of the changes.
π If you're coming from FS2 2.x, be sure to check out the release notes for v3.0.0-M1.
π Besides integration with
cats.effect.std.Dispatcher
, this release contains a few new features:- β±
TimedPull
, a new type which simplifies implementing pulls that timeout (#2062) Stream.bracketFull
, providing the ability to have controlled interruptible resource acquisition (#2088)- Removal of
Stream#translateInterruptible
(#2082) β Addition of the
fs2.io.Network[F]
capability trait (#2071)git shortlog -sn --no-merges "v3.0.0-M1".."v3.0.0-M2" 75 Fabio Labella 21 mpilquist 10 Daniel Vigovszky 7 Scala Steward 6 Michael Pilquist 3 Diego E. Alonso Blas 1 Lucas Satabin 1 RafaΕ Krzewski 1 Lars Hupel 1 satorg
- β±
-
v3.0.0-M1 Changes
October 07, 2020π FS2 3.0.0-M1 is the first milestone in the 3.x release series, featuring support for Cats Effect 3. Like Cats Effect 3, we expect a number of milestone releases before a 3.0.0 final release. Neither binary nor source compatibility with FS2 2.x is provided, though APIs are largely the same and porting should not be a large task.
π The primary feature of FS2 3.0 is support for the Cats Effect 3 type class hierarchy. The Cats Effect 3.0.0-M1 release notes provide a great overview of the changes.
FS2 3 also includes some notable changes:
Stream Compilation
Streams are converted to effects via expressions like
s.compile.toList
ands.compile.drain
. Callings.compile
on aStream[F, O]
requires an implicitCompiler[F, X]
(whereX
is chosen based on the type of compilation requested).π In FS2 2.x, getting a
Compiler[F, X]
instance for the effectF
generally required aSync[F]
(this is not true for thePure
andFallible
effects but is otherwise accurate). In FS2 3, compilation now only requires aConcurrent[F]
. If aConcurrent[F]
is not available, then compilation falls back to using aSync[F]
-- this allows stream compilation for effects likeSyncIO
which do not have aConcurrent
instance.π In a polymorphic context, compilation is supported by either adding a
Concurrent[F]
constraint, or if compilation of non-concurrent effects is needed as well, aCompiler.Target
constraint:import fs2.{Compiler, Stream}import cats.effect.Concurrent// Allows compilation for any Concurrent[F] but not for things like SyncIOdef compileThis[F[\_]: Concurrent, O](f: Stream[F, O]): F[Unit] = f.compile.drain// Allows compilation for any Concurrent[F] or any Sync[F]def compileThat[F[\_]: Compiler.Target, O](f: Stream[F, O]): F[Unit] = f.compile.drain
No More Blocker
π The
cats.effect.Blocker
type was removed in CE 3 -- instead,Sync[F]
supports blocking calls viaSync[F].blocking(thunk)
. As a result, FS2 APIs that took aBlocker
have been simplified and in some cases, operations have been combined (e.g.,lines
&linesAsync
have been combined to justlines
).Sinks
π The deprecated
Sink
trait has finally been removed and we now represent sinks via a stream transformation that discards all output values --Stream[F, O] => Stream[F, Nothing]
akaPipe[F, O, Nothing]
. This is different than the old definition ofSink
which emitted an undefined number ofUnit
values -- and as a result of the behavior being undefined, implementations varied widely. Implementations included emitting:- 0 unit values
- 1 unit at termination of the source stream
- 1 unit per output element from source stream
- 1 unit per output chunk from source stream
- etc.
There are a few ergonomic improvements related to the new encoding of sinks:
- π¨
Stream.exec(IO.println(...))
-Stream.exec
takes anF[Unit]
and returns aStream[F, Nothing]
- π¨
Stream(1, 2, 3).foreach(IO.println)
- Theforeach
method onStream
takes aO => F[Unit]
and returns aStream[F, Nothing]
s.unitary
- Theunitary
method onStream
converts aStream[F, Nothing]
to aStream[F, Unit]
which emits a single unit at termination ofs
- Calling
flatMap
on aStream[F, Nothing]
no longer compiles, which avoids mistakes that result in unexpected behavior.
Capability Traits
π The fs2-io project provides support for working with files and networks, abstracting the Java NIO APIs. The implementations require either
Async[F]
orSync[F]
depending on whether the underlying NIO API is non-blocking or blocking.One of the main features of CE3 is the position of the
Sync
andAsync
type classes in the hierarchy. As the most powerful type classes, they are now firmly at the bottom of the hierarchy. To avoid requiringSync
/Async
constraints in code that uses fs2-io, we are adding capability traits -- traits which limit the capabilities of an effect to a discrete set of operations. The newfs2.io.file.Files[F]
capability trait provides the ability to work with files in the effectF
. For example:def readAllText[F[\_]: Files](directory: Path): Stream[F, String] =Files[F].directoryStream(directory).flatMap { f =\>Files[F].readAll(f, 1024\*1024) .through(text.utf8Decode) .through(text.lines) }
π The
readAllText
method takes aFiles[F]
capability instead of anAsync[F]
, providing better parametric reasoning.In future FS2 3 milestones, we'll be adding additional capability traits -- e.g., for networking / sockets.
Roadmap
π Our goal is to release FS2 3.0.0 final in conjunction with Cats Effect 3.0.0 and Scala 3.0.0. We're planning on including some additional improvements in the milestones between now and then, including:
- Simplifying time limited pull operations via a new
TimedPull
construct (#2062) - β‘οΈ Improving
Queue
-- both supporting the plannedQueue
in CE3 as well as providing a new, optimized queue implementation that supports stream concepts more directly (e.g., termination & error propagation).
Please provide feedback, both on existing features and the roadmap.
-
v2.5.0-M3 Changes
November 30, 2020π The 2.5.0-M3 release is functionally the same as 2.4.6 except it depends on the latest milestone releases of Cats and Cats Effect and includes builds for Scala 3.0.0-M1 and 3.0.0-M2.
-
v2.5.0-M2
November 28, 2020 -
v2.5.0-M1 Changes
November 09, 2020π The 2.5.0-M1 release is functionally the same as 2.4.5 except it depends on the latest milestone releases of Cats and Cats Effect and includes builds for Dotty 0.27.0-RC1 and Scala 3.0.0-M1.
-
v2.4.6 Changes
November 24, 2020π This is a maintenance release for the 2.4 series and is fully backwards compatible with previous releases.
π This release is built for Scala 2.12, 2.13, and Scala.js 1.3.0. Scala.js 0.6 support has been dropped now that it is EOL.
π This release fixes a bug that prevented interruption of a stream that had been translated (#2143).