Разве модель актора не является анти-шаблоном, поскольку стиль «выстрелил-забыл» заставляет акторов запоминать состояние?

При изучении Scala одной из первых вещей, которые я усвоил, было то, что каждая функция что-то возвращает. Не существует "void"-функции/метода, как, например, в Java. Таким образом, многие Scala-функции являются настоящими функциями с математической точки зрения, и объекты могут оставаться в основном без состояния.

Теперь я узнал, что акторная модель — очень популярная модель среди функциональных языков, таких как Scala. Однако субъекты продвигают стиль программирования «выстрелил-забыл», и вызывающие обычно не ожидают, что вызываемые лица будут напрямую отвечать на сообщения (за исключением случаев использования метода «спросить»/«?»). Следовательно, актеры должны помнить какое-то состояние.

Правильно ли я предполагаю, что акторная модель больше похожа на компромисс между масштабируемостью и удобством сопровождения (из-за сохранения состояния) и иногда может даже считаться анти-шаблоном?


person Felix Gehring    schedule 19.10.2016    source источник
comment
Разве Unit не соответствует более или менее void в Java?   -  person rethab    schedule 19.10.2016
comment
Не существует void-функции/метода, как, например, в Java. Таким образом, многие Scala-функции являются настоящими функциями с математической точки зрения, и объекты могут оставаться в основном без состояния. Второй пункт не следует из первого. Объекты без состояния и истинные функции не имеют никакого отношения к отсутствию типа void (и в любом случае Unit — это void Scala, как указывает @rethab).   -  person The Archetypal Paul    schedule 19.10.2016
comment
Mmm iirc ask не блокирует. У него есть тайм-аут, но он не блокируется.   -  person Diego Martinoia    schedule 19.10.2016


Ответы (2)


Да, вы по сути правы (я не совсем уверен, что вы имеете в виду, когда говорите масштабируемость и ремонтопригодность).

Актеры популярны в Scala из-за Akka (который, предположительно, в свою очередь популярен из-за поддержки, которую он получает от Lightbend). Однако это не тот случай, когда акторы чрезвычайно популярны в мире функционального программирования (хотя реализации существуют для всех языков, о которых я думаю). Ниже приведены мои сильно упрощенные впечатления (так что принимайте их с необходимым количеством соли) двух других языковых сообществ FP, оба из которых используют акторы (намного?) реже, чем Scala.

Помимо STM, каналы и акторы могут накладываться друг на друга; как-то странно сравнивать их, как если бы они были взаимоисключающими подходами. Однако на практике редко можно увидеть, как все они используются в тандеме.

Актеры действительно включают состояние (и в случае с безопасностью типа юбки Akka), и в результате они очень выразительны и могут в значительной степени делать что угодно с точки зрения параллелизма. В этом они похожи на функции с побочными эффектами, которые более выразительны, чем чистые функции. Действительно, актеры в некотором смысле являются чистой сущностью объектно-ориентированного программирования со всеми его плюсами и минусами.

Таким образом, существует значительный < href="https://www.chrisstucchio.com/blog/2013/actors_vs_futures.html" rel="noreferrer">фрагмент сообщества Scala, который скажет да, если большую часть времени, когда вы сталкиваетесь с проблемы параллелизма, вы используете актеров, это, вероятно, анти-шаблон.

person badcook    schedule 20.10.2016

Актеры — это особый инструмент в наборе инструментов для обработки и распределения состояния. Так что да, у них должно быть состояние — если нет, то вы просто можете использовать фьючерсы.

Обратите внимание, однако, что акторы (по крайней мере, акторы Akka) обрабатывают распределение (выполнение прозрачного местоположения на нескольких узлах), чего не может сделать ни одна из функций Futures. Аспекты параллелизма в Актерах являются результатом того, что они обрабатывают более сложный случай — работу в сети. В этом смысле Актеры объединяют удаленный кейс с локальным, делая удаленный кейс первоклассным. И, как оказалось, обмен сообщениями в сети — это именно то, на что вы можете рассчитывать и опираться, если вам нужны надежные, отказоустойчивые и быстрые системы.

Надеюсь, это ответит на часть вашего вопроса "в целом".

person Konrad 'ktoso' Malawski    schedule 19.10.2016