Sto guardando la programmazione funzionale e sto lottando con un punto .. Come faccio a fare quanto segue senza lo stato mutabile?Come posso scrivere un server multi-client che non ha lo stato mutabile?
Immagina di avere un server .. e i client provano a collegarsi .. e ogni client assegna al server un numero e viene informato del totale corrente.
Ora senza lo stato mutabile il server non può mantenere un totale ... quindi penso che ogni client stia davvero creando un nuovo server che contiene un nuovo totale .. o un nuovo server che contiene la voce e fa riferimento al vecchio server in modo il totale può essere calcolato.
MA ... come fa il client a trovare il server? Qualcuno deve mantenere l'istanza del server corrente ... quindi hanno una variabile mutabile 'server'.
Non importa quello che faccio .. Finisco sempre con una variabile mutabile un ambito più alto.
Pensieri?
Posso vedere come funzionerebbe con più client sequenziali. Funzionerebbe in un sistema parallelo multicore? Questo lo costringe a essere sequenziale? –
Impone che sia sequenziale, poiché può gestire solo una connessione alla volta. Il problema quindi con multicore è che si potrebbe rifiutare una connessione (s). Spesso hai un qualche tipo di meccanismo per affrontarlo. Il meccanismo di Erlang è di far passare tutti i client al server un messaggio che viene inserito in una coda per l'elaborazione. Non è l'unico modo, anche se non ho molta familiarità con gli altri. –
È interessante notare che questa è una soluzione circolare poiché lo stack è uno stato mutabile non appena si hanno due client per il proprio stack (ad esempio uno spintore e un estrattore) ... perché gli stack immutabili producono nuovo stack quando si spinge o si fa pop ... quindi come possono entrambi lo spintore e l'estrattore parlare alla stessa coda. :) –