Diferencias de la biblioteca de streaming de Scala (Flujos reactivos / Iteratee / RxScala / Scalaz…)


Estoy siguiendo el curso de Programación Reactiva Funcional en Scala en Coursera y nos ocupamos de los Observables de RxScala (basados en RxJava).

Por lo que sé, la biblioteca de Play Iteratee se parece un poco a RxScala Observables, donde Observables un poco como Enumeradores y Observadores son un poco como Iteratees.

También está la biblioteca de secuencias de Scalaz, y tal vez algunos otros?


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


PD: Me pregunto por qué la biblioteca Play Iteratees no ha sido elegida por Martin Odersky para su curso, ya que Play está en la pila Typesafe. ¿Significa que Martin prefiere RxScala a los iterados de juego?


Editar: la iniciativa Flujos reactivos acaba de ser anunciada, 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

Author: Sebastien Lorber, 2013-12-11

2 answers

PD: Me pregunto por qué Jugar Iteratees biblioteca no ha sido elegido por Martin Odersky por su curso ya que el juego está en la pila de seguridad tipográfica. Haciéndolo mean Martin prefiere RxScala sobre Iteratees de juego?

Responderé esto. La decisión de qué API de streaming empujar/enseñar no ha sido tomada solo por Martin, sino por Typesafe en su conjunto. No se lo que Martin personalmente prefiere (aunque lo he escuchado decir iteratees son demasiado difíciles para los recién llegados), pero nosotros en Typesafe piensa que los iterados requieren una curva de aprendizaje demasiado alta para enseñarles a los recién llegados en IO asincrónico.

Al final del día, la elección de la biblioteca de streaming 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 un costo de una API muy difícil de aprender (incluso los desarrolladores de Haskell experimentados a menudo luchan con iteratees), y también algunas pérdidas en el rendimiento. Otras API manejan menos casos de uso, por ejemplo, RX no maneja (actualmente) la contrapresión, y muy pocas de las otras API son adecuadas para el análisis simple de streaming. Pero el análisis por streaming es en realidad un caso de uso bastante raro para los usuarios finales, en la mayoría de los casos basta con simplemente almacenar en búfer y luego analizar. Por lo tanto, Typesafe ha elegido API que son fáciles de aprender y cumplen con la mayoría de los casos de uso más comunes.

 20
Author: James Roper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-21 21:25:06

Los iterados y la secuencia no son realmente tan similares a RxJava. La diferencia crucial es que se preocupan por la seguridad de los recursos (es decir, el cierre de archivos, sockets, etc.). una vez que ya no se necesitan), lo que requiere retroalimentación (los iterados pueden decirle a los Enumeradores que están hechos, pero los Observadores no le dicen nada a los Observables) y los hace significativamente más complejos.

 7
Author: Alexey Romanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-12 05:50:11