29 votes

Différences entre les bibliothèques de streaming Scala (Reactive Streams/Iteratee/RxScala/Scalaz...)

Je suis le cours Functional Reactive Programming in Scala sur Coursera et nous traitons des Observables RxScala (basés sur RxJava).

Pour autant que je sache, la bibliothèque de Play Iteratee ressemble un peu aux Observables de RxScala, où les Observables sont un peu comme les Enumérateurs et les Observateurs sont un peu comme les Iteratees.

Il y a aussi la bibliothèque Scalaz Stream, et peut-être d'autres ?


J'aimerais donc connaître les principales différences entre toutes ces bibliothèques. Dans quel cas l'une pourrait-elle être meilleure qu'une autre ?


PS : Je me demande pourquoi la bibliothèque Play Iteratees n'a pas été choisie par Martin Odersky pour son cours puisque Play fait partie de la pile Typesafe. Cela signifie-t-il que Martin préfère RxScala à Play Iteratees ?


Editar: el Flux réactifs L'initiative vient d'être annoncée, comme une tentative pour standardize a common ground for achieving statically typed, high-performance, low latency, asynchronous streams of data with built-in non-blocking back pressure

17voto

James Roper Points 4066

PS : Je me demande pourquoi la bibliothèque Play Iteratees n'a pas été choisie par Martin. Odersky pour son cours puisque Play fait partie de la pile Typesafe. Est-ce que cela Martin préfère RxScala à Play Iteratees ?

Je vais répondre à cette question. La décision concernant les API de streaming à promouvoir/enseigner n'est pas prise uniquement par Martin, mais par Typesafe dans son ensemble. Je ne sais pas ce que Martin préfère personnellement (bien que je l'aie entendu dire que les itérations sont trop difficiles pour les nouveaux venus), mais nous, à Typesafe, pensons que les itérations nécessitent une courbe d'apprentissage trop élevée pour les enseigner aux nouveaux venus en matière d'EOI asynchrone.

En fin de compte, le choix de la bibliothèque de streaming dépend vraiment de votre cas d'utilisation. La bibliothèque iteratees de Play gère pratiquement tous les cas d'utilisation du streaming, mais au prix d'une API très difficile à apprendre (même les développeurs Haskell chevronnés ont souvent du mal avec iteratees) et d'une certaine perte de performance. D'autres API gèrent moins de cas d'utilisation, RX par exemple ne gère pas (actuellement) la contre-pression, et très peu d'autres API sont adaptées à l'analyse syntaxique en continu. Mais l'analyse syntaxique en continu est en fait un cas d'utilisation assez rare pour les utilisateurs finaux, dans la plupart des cas, il suffit de mettre en mémoire tampon puis d'analyser. Typesafe a donc choisi des API faciles à apprendre et répondant à la majorité des cas d'utilisation les plus courants.

7voto

Alexey Romanov Points 39124

Iteratees et Stream ne sont pas vraiment très similaires à RxJava. La différence essentielle est qu'ils sont concernés par la sécurité des ressources (c'est-à-dire la fermeture des fichiers, des sockets, etc. une fois qu'ils ne sont plus nécessaires), ce qui nécessite un retour d'information (les Iteratees peuvent dire aux Enumerators qu'ils ont terminé, mais les Observers ne disent rien aux Observables) et les rend beaucoup plus complexes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X