He estado tratando de encontrar algo que discuta cuándo deberías favorecer el uso de mónadas sobre actores (en escenarios de simultaneidad), pero no he encontrado nada. En particular, me pregunto sobre el uso de las Extensiones reactivas (LINQ a eventos) frente a MailboxProcessor de F #. Por favor, den ejemplos además de cualquier razonamiento filosófico que pueda tener.Mónadas y actores
actualización Para un mejor contexto, las extensiones reactivas implementar la mónada continuación en forma de IObservable/IObserver. No necesariamente estoy diciendo que tengo que usar F #, solo que F # tiene un "modelo de actor" concreto disponible en un lenguaje .NET en forma de MailboxProcessor < 'T>.
Lo que trato de entender es cuándo usar una mónada (en este caso, una mónada de continuación) frente a un modelo de actor para propósitos de concurrencia. Cuando la mónada (según tengo entendido) no introduce estado, el actor tiene su propio estado interno que se modifica según sea necesario para proporcionar acceso protegido.
He visto varios ejemplos del uso de ambos: Rx y node.js (CPS, no es realmente la mónada de continuación) frente a MailboxProcessor de F # y el framework Akka de Scala. Simplemente no sé por qué elegirías uno sobre el otro.
Esto probablemente será completamente inútil para usted, ya que no sé f # y realmente no entiendo su pregunta donde está viniendo, pero me escribió una implementación modelo de actor en Haskell, que hace uso de la mónada stack (un cómputo actor es una mónada Reader/IO): http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html – jberryman
[Phil Trelford ] (http://twitter.com/ptrelford) también ha creado una implementación de [Rx using actors] (http://minirx.codeplex.com/), por lo que parece que, dependiendo de lo que esté haciendo, usted podría implementar actores usando mónadas o mónadas usando actores. –
Otra pieza de "podría no serle útil". Una vez me han señalado que el objetivo principal de Rx no es introducir la concurrencia sino abordarla. Mientras que uno puede considerar al agente F # como una forma apropiada de introducir concurrencia. –