Tenho observado a crescente visibilidade das linguagens e recursos de programação funcional por um tempo. Eu olhei para eles e não vi o motivo do apelo.
Então, recentemente, participei da apresentação "Basics of Erlang" de Kevin Smith na Codemash .
Gostei da apresentação e aprendi que muitos dos atributos da programação funcional tornam muito mais fácil evitar problemas de threading / simultaneidade. Eu entendo que a falta de estado e mutabilidade torna impossível para vários threads alterar os mesmos dados, mas Kevin disse (se eu entendi corretamente) toda a comunicação ocorre por meio de mensagens e as mensagens são processadas de forma síncrona (novamente evitando problemas de simultaneidade).
Mas eu li que Erlang é usado em aplicativos altamente escaláveis (a razão pela qual a Ericsson o criou em primeiro lugar). Como pode ser eficiente lidar com milhares de solicitações por segundo se tudo é tratado como uma mensagem processada de forma síncrona? Não é por isso que começamos a nos mover para o processamento assíncrono - para que possamos aproveitar a execução de vários threads de operação ao mesmo tempo e obter escalabilidade? Parece que essa arquitetura, embora mais segura, é um retrocesso em termos de escalabilidade. o que estou perdendo?
Eu entendo que os criadores do Erlang intencionalmente evitaram o suporte a threading para evitar problemas de simultaneidade, mas pensei que o multi-threading era necessário para alcançar escalabilidade.
Como as linguagens de programação funcional podem ser inerentemente thread-safe, mas ainda assim escalar?