Iteratee alternatives and similar packages
Based on the "Functional Reactive Programming" category.
Alternatively, view Iteratee alternatives based on common mentions on social networks and blogs.
Vert.x9.9 9.2 L1 Iteratee VS Vert.xVert.x is a tool-kit for building reactive applications on the JVM
ZIO9.6 9.7 Iteratee VS ZIOZIO — A type-safe, composable library for async and concurrent programming in Scala
Monix9.0 6.4 Iteratee VS MonixAsynchronous, Reactive Programming for Scala and Scala.js.
RxScala8.0 0.0 Iteratee VS RxScalaRxScala – Reactive Extensions for Scala – a library for composing asynchronous and event-based programs using observable sequences
Scala.Rx8.0 0.0 Iteratee VS Scala.RxAn experimental library for Functional Reactive Programming in Scala
SynapseGrid3.8 0.0 Iteratee VS SynapseGridSynapseGrid is a framework for constructing dynamic low latency data flow systems.
typed-actors3.8 0.0 Iteratee VS typed-actorscompile-time typechecked akka actors
REScala3.4 9.4 Iteratee VS REScalaREScala - distributed and reactive programming embedded in OO and FP programs.
Reactor-Scala-ExtensionsA scala extension for Project Reactor's Flux and Mono
scala.frp2.1 0.0 Iteratee VS scala.frpFunctional Reactive Programming for Scala
Reactive Collections1.0 0.0 Iteratee VS Reactive CollectionsA concurrent reactive programming framework.
Static code analysis for 29 languages.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Iteratee or a related project?
This project is an iteratee implementation for Cats that began as a port of Scalaz's iteratee package, although the API and implementation are now very different from Scalaz's. There are API docs (but they're a work in progress), and I've published a blog post introducing the project.
The motivations for the port are similar to those for circe—in particular I'm aiming for a more consistent API, better performance, and better documentation.
Note that this library doesn't support many of the use cases that fs2 (formerly Scalaz Stream) is designed to handle. It doesn't support nondeterministic reading from multiple streams, for example, and in general is a less appropriate choice for situations where concurrency and parallelism are primary goals. Where the use cases of fs2 and this library do overlap, however, it's often likely to be a simpler, faster solution.
The initial performance benchmarks look promising. For example, here are the throughput results for
summing a sequence of numbers with this library and
II), this library and Monix's
IM), this library and Scalaz's
IT), this library and Twitter futures (
Scalaz Stream (
S), scalaz-iteratee (
Z), play-iteratee (
P), the Scala
collections library (
C), and fs2 (
F). Higher numbers are better.
Benchmark Mode Cnt Score Error Units InMemoryBenchmark.sumInts0II thrpt 80 10225.388 ± 191.612 ops/s InMemoryBenchmark.sumInts1IM thrpt 80 13395.800 ± 30.912 ops/s InMemoryBenchmark.sumInts2IT thrpt 80 18609.579 ± 47.491 ops/s InMemoryBenchmark.sumInts3IR thrpt 80 15999.740 ± 114.949 ops/s InMemoryBenchmark.sumInts4S thrpt 80 72.074 ± 1.209 ops/s InMemoryBenchmark.sumInts5Z thrpt 80 310.472 ± 4.368 ops/s InMemoryBenchmark.sumInts6P thrpt 80 43.071 ± 0.543 ops/s InMemoryBenchmark.sumInts7C thrpt 80 12975.042 ± 48.702 ops/s InMemoryBenchmark.sumInts8F thrpt 80 9610.699 ± 41.936 ops/s
And the results for collecting the first 10,000 values from an infinite stream of non-negative
numbers into a
Benchmark Mode Cnt Score Error Units StreamingBenchmark.takeLongs0II thrpt 80 2787.725 ± 16.812 ops/s StreamingBenchmark.takeLongs1IM thrpt 80 1617.848 ± 19.899 ops/s StreamingBenchmark.takeLongs2IT thrpt 80 1052.494 ± 7.707 ops/s StreamingBenchmark.takeLongs3IR thrpt 80 979.514 ± 26.197 ops/s StreamingBenchmark.takeLongs4S thrpt 80 56.882 ± 0.969 ops/s StreamingBenchmark.takeLongs5Z thrpt 80 154.103 ± 10.350 ops/s StreamingBenchmark.takeLongs6P thrpt 80 1.216 ± 0.005 ops/s StreamingBenchmark.takeLongs7C thrpt 80 3273.158 ± 55.187 ops/s StreamingBenchmark.takeLongs8F thrpt 80 7.915 ± 0.044 ops/s
And allocation rates (lower is better):
Benchmark Mode Cnt Score Error Units InMemoryBenchmark.sumInts0II:gc.alloc.rate.norm thrpt 20 159953.462 ± 11.863 B/op InMemoryBenchmark.sumInts1IM:gc.alloc.rate.norm thrpt 20 160203.272 ± 5.949 B/op InMemoryBenchmark.sumInts2IT:gc.alloc.rate.norm thrpt 20 160622.026 ± 6.323 B/op InMemoryBenchmark.sumInts3IR:gc.alloc.rate.norm thrpt 20 160398.303 ± 6.685 B/op InMemoryBenchmark.sumInts4S:gc.alloc.rate.norm thrpt 20 63936897.241 ± 320928.043 B/op InMemoryBenchmark.sumInts5Z:gc.alloc.rate.norm thrpt 20 16401510.998 ± 6.115 B/op InMemoryBenchmark.sumInts6P:gc.alloc.rate.norm thrpt 20 13802446.593 ± 229152.745 B/op InMemoryBenchmark.sumInts7C:gc.alloc.rate.norm thrpt 20 159851.547 ± 14.556 B/op InMemoryBenchmark.sumInts8F:gc.alloc.rate.norm thrpt 20 260454.260 ± 1522.736 B/op Benchmark Mode Cnt Score Error Units StreamingBenchmark.takeLongs0II:gc.alloc.rate.norm thrpt 20 3043720.338 ± 0.018 B/op StreamingBenchmark.takeLongs1IM:gc.alloc.rate.norm thrpt 20 3444961.639 ± 4.168 B/op StreamingBenchmark.takeLongs2IT:gc.alloc.rate.norm thrpt 20 5804308.795 ± 61718.228 B/op StreamingBenchmark.takeLongs3IR:gc.alloc.rate.norm thrpt 20 5124124.296 ± 5.147 B/op StreamingBenchmark.takeLongs4S:gc.alloc.rate.norm thrpt 20 75347149.315 ± 555268.150 B/op StreamingBenchmark.takeLongs5Z:gc.alloc.rate.norm thrpt 20 28588033.048 ± 238419.245 B/op StreamingBenchmark.takeLongs6P:gc.alloc.rate.norm thrpt 20 1206196498.000 ± 71329.621 B/op StreamingBenchmark.takeLongs7C:gc.alloc.rate.norm thrpt 20 526752.310 ± 0.029 B/op StreamingBenchmark.takeLongs8F:gc.alloc.rate.norm thrpt 20 531380973.839 ± 13505581.754 B/op
iteratee.io is licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
*Note that all licence references and agreements mentioned in the Iteratee README section above are relevant to that project's source code only.