A few years ago, Erlang wouldn’t have been on this list. It’s the youngest language listed here—by quite a large margin. Why is it here? Because it embodies a style of programming that will become more important as more computers employ a multi-core design.
Erlang is based on the communicating sequential processes (CSP) model of concurrency. It provides a mechanism for creating independent processes very cheaply and for passing messages between those processes. What separates Erlang from the other languages discussed thus far is that Erlang is built around asynchronous communication. C and Lisp functions—and even Smalltalk messages—typically execute synchronously; you start one and then wait for it to finish. Sending an Erlang message doesn’t block the sending process, so it can do something else while it waits for the process handling the message to complete.
This approach allows you to write very scalable code, without the pitfalls associated with threads. There’s no shared memory, so you never need to deal with locks. You can still introduce deadlock if you have two processes waiting for each other, but this situation is quite rare.