Estoy buscando programación funcional y luchando con un punto ... ¿Cómo hago lo siguiente sin estado mutable?¿Cómo puedo escribir un servidor multicliente que no tiene estado mutable?
Imagine que tengo un servidor ... y los clientes intentan conectarse ... y cada cliente le da un número al servidor y se le informa el total actual.
Ahora, sin estado mutable, el servidor no puede mantener un total ... así que creo que cada cliente está realmente creando un nuevo servidor que contiene un nuevo total ... o un nuevo servidor que contiene la entrada y hace referencia al viejo servidor el total puede ser calculado.
PERO ... ¿cómo el cliente encuentra el servidor? Alguien tiene que aferrarse a la instancia del servidor actual ... por lo que tienen una variable mutable 'servidor'.
No importa lo que haga ... Siempre termino con una variable mutable de mayor alcance.
¿Pensamientos?
Veo cómo funcionaría esto con múltiples clientes secuenciales. ¿Esto funcionaría en un sistema paralelo multinúcleo? ¿Esto lo fuerza a ser secuencial? –
Obliga a que sea secuencial, ya que solo puede manejar una conexión a la vez. El problema entonces con multinúcleo es que puede rechazar una conexión (s). A menudo tienes algún tipo de mecanismo para lidiar con eso. El mecanismo de Erlang es hacer que todos sus clientes pasen a su servidor un mensaje que se coloca en una cola para su procesamiento. Esa no es la única forma, aunque no estoy muy familiarizado con los demás. –
Curiosamente, esta es una solución circular ya que una pila es un estado mutable tan pronto como tenga dos clientes para su pila (es decir, un empujador y un extractor) ... porque las pilas inmutables producen una nueva pila cuando empuja o estalla ... por lo tanto ¿Cómo pueden el empujador y el extractor estar hablando con la misma cola? :) –