Подтвердить что ты не робот

Scala различия в потоковой библиотеке (реактивные потоки/Iteratee/RxScala/Scalaz...)

Я слежу за функциональным реактивным программированием в курсе Scala на Coursera, и мы имеем дело с RxScala Observables (на основе RxJava).

Насколько я знаю, библиотека Play Iteratee немного похожа на RxScala Observables, где Observables немного похожа на Enumerators и Observer, немного похож на Iteratees.

Также есть библиотека Scalaz Stream и, возможно, некоторые другие?


Итак, я хотел бы узнать основные различия между всеми этими библиотеками. В этом случае лучше быть лучше другого?


PS: Интересно, почему Play Iteratees библиотека не была выбрана Мартином Одерским для его курса, так как Play находится в стеке типов. Означает ли это, что Мартин предпочитает RxScala над Play Iteratees?


Изменить: инициатива Реактивные потоки была объявлена ​​как попытка standardize a common ground for achieving statically typed, high-performance, low latency, asynchronous streams of data with built-in non-blocking back pressure

4b9b3361

Ответ 1

PS: Интересно, почему библиотека Play Iteratees не была выбрана Мартином Odersky за свой курс, так как Play находится в стеке типов. Имеет ли это означает, что Мартин предпочитает RxScala над Play Iteratees?

Я отвечу на это. Решение о том, какой потоковый API для толкования/обучения не является тем, что было сделано только Мартином, но по методу Typesafe в целом. Я не знаю, что лично предпочитает Мартин (хотя я слышал, что он говорит, что это слишком сложно для новичков), но мы в "Типы" полагаем, что Iteratees требует слишком высокой кривой обучения, чтобы научить их новичков в асинхронном IO.

В конце дня выбор потоковой библиотеки действительно сводится к вашему прецеденту. Воспроизведение итераций библиотеки обрабатывает практически все существующие потоковые варианты использования, но по цене очень трудно освоить API (даже опытные разработчики Haskell часто борются с итерациями), а также некоторые потери производительности. Другие API-интерфейсы обрабатывают меньше случаев использования, например, RX не обрабатывает обратное давление (в настоящее время), и очень немногие из других API подходят для простого потокового анализа. Но потоковый синтаксический анализ на самом деле довольно редкий случай использования для конечных пользователей, в большинстве случаев достаточно просто выполнить буферизацию, затем разобрать. Таким образом, Typesafe выбрал API, которые легко узнать и соответствуют большинству наиболее распространенных случаев использования.

Ответ 2

Iteratees и Stream на самом деле не похожи на RxJava. Ключевое различие заключается в том, что они связаны с безопасностью ресурсов (то есть закрытием файлов, сокетами и т.д., Когда они больше не нужны), что требует обратной связи (Iteratees может сказать, что они перечислены, но наблюдатели ничего не говорят к Наблюдаемым) и делает их значительно более сложными.