Writing code that runs in parallel has been the source of much pain in software development. It seems like the problems arising from multithreaded, multi-process, or multi-server environments are fundamentally difficult to solve. Deadlocks, starvation, data races, locks, or debugging multi-threaded code are just a few terms that make those of us who've seen them afraid of ever meeting them again. However, we have to face parallel code because of multi-core CPUs, GPUs, and multiple servers. Can functional programming help with this?
Everyone agrees that this is one of the strong points of functional programming, specifically derived from immutability. If your data never changes, there are no locks and the synchronization is so simple that it can be generalized. If you just use pure functions and functional transformations...