scala playframework-2.0 iterate rx-java scalaz-stream

Diferencias de la biblioteca de secuencias de Scala(Reactive Streams/Iteratee/RxScala/Scalaz…)



playframework-2.0 rx-java (2)

Estoy siguiendo el curso de Programación reactiva funcional en Scala en Coursera y tratamos con RxScala Observables (basado en RxJava).

Hasta donde yo sé, la biblioteca de Play Iteratee se parece un poco a RxScala Observables, donde los Observables se parecen un poco a los Enumeradores y Observadores.

También está la biblioteca Scalaz Stream, y tal vez algunas otras?

Así que me gustaría saber las principales diferencias entre todas estas bibliotecas. ¿En qué caso uno podría ser mejor que otro?

PD: Me pregunto por qué la biblioteca de Play Iteratees no ha sido elegida por Martin Odersky para su curso ya que Play está en el stack Typesafe. ¿Significa que Martin prefiere RxScala sobre Play Iteratees?

Editar: se acaba de anunciar la iniciativa Flujos reactivos , como un intento de standardize a common ground for achieving statically typed, high-performance, low latency, asynchronous streams of data with built-in non-blocking back pressure


PD: Me pregunto por qué la biblioteca de Play Iteratees no ha sido elegida por Martin Odersky para su curso ya que Play está en el stack Typesafe. ¿Significa que Martin prefiere RxScala sobre Play Iteratees?

Voy a responder esto. La decisión de qué API de transmisión para impulsar / enseñar no es una decisión tomada solo por Martin, sino por Typesafe en general. No sé lo que Martin prefiere personalmente (aunque le he oído decir que las repeticiones son demasiado difíciles para los recién llegados), pero en Typesafe pensamos que los iterados requieren una curva de aprendizaje demasiado alta para enseñarles a los recién llegados en IO asíncrono.

Al final del día, la elección de la biblioteca de transmisión realmente se reduce a su caso de uso. La biblioteca iteratees de Play maneja prácticamente todos los casos de uso de streaming existentes, pero a costa de una API muy difícil de aprender (incluso los experimentados desarrolladores de Haskell a menudo tienen problemas con las iteraciones), y también algunas pérdidas en el rendimiento. Otras API manejan menos casos de uso, RX, por ejemplo, no (actualmente) maneja la contrapresión, y muy pocas de las otras API son adecuadas para el análisis simple en tiempo real. Pero el análisis por secuencias es en realidad un caso de uso bastante raro para los usuarios finales, en la mayoría de los casos es suficiente simplemente amortiguar y luego analizar. Así que Typesafe ha elegido API que son fáciles de aprender y que cumplen con la mayoría de los casos de uso más comunes.


Iteratees y Stream no son realmente tan similares a RxJava. La diferencia fundamental es que les preocupa la seguridad de los recursos (es decir, cerrar archivos, enchufes, etc. una vez que ya no los necesiten), lo que requiere comentarios (los iteradores pueden decir a los enumeradores que han terminado, pero los observadores no dicen nada a Observables) y los hace significativamente más complejos.