Ho osservato per un po 'la crescente visibilità dei linguaggi e delle funzionalità di programmazione funzionali. Li ho esaminati e non ho visto il motivo dell'appello.
Poi, di recente, ho assistito alla presentazione "Basics of Erlang" di Kevin Smith a Codemash .
Mi è piaciuta la presentazione e ho imparato che molti degli attributi della programmazione funzionale rendono molto più facile evitare problemi di threading / concorrenza. Comprendo che la mancanza di stato e la mutabilità rende impossibile per più thread alterare gli stessi dati, ma Kevin ha detto (se ho capito bene) che tutte le comunicazioni avvengono tramite messaggi e che i messaggi vengono elaborati in modo sincrono (ancora una volta evitando problemi di concorrenza).
Ma ho letto che Erlang è utilizzato in applicazioni altamente scalabili (il motivo principale per cui Ericsson lo ha creato in primo luogo). Come può essere efficiente gestire migliaia di richieste al secondo se tutto viene gestito come un messaggio elaborato in modo sincrono? Non è per questo che abbiamo iniziato a passare all'elaborazione asincrona, in modo da poter trarre vantaggio dall'esecuzione di più thread operativi contemporaneamente e ottenere la scalabilità? Sembra che questa architettura, sebbene più sicura, sia un passo indietro in termini di scalabilità. Cosa mi sto perdendo?
Capisco che i creatori di Erlang abbiano intenzionalmente evitato di supportare il threading per evitare problemi di concorrenza, ma ho pensato che il multi-threading fosse necessario per ottenere la scalabilità.
In che modo i linguaggi di programmazione funzionale possono essere intrinsecamente thread-safe, ma comunque scalabili?