The emerging languages display an impressive diversity of goals and potential uses. Before focusing on their strengths and making comparisons, let’s look at some of today’s relevant programming issues:
Extended data types
The expanding functions of functions
The “end of Moore’s law” near the beginning of the previous decade, in which the speed of chips hit at least a temporary limit, shifted the quest for better performance to parallel computing. Even if we’ll someday see a breakthrough come from one of the many research directions in new microprocessors, programmers are likely to continue breaking programs into small, parallel components for several reasons, including robustness, the greater agility provided by modular development, and the geographic distribution of data and processing.
In every language, developers are exploring how to design it as functions that run in separate threads on the same system or on different physical and virtual systems. A special advantage goes to languages that create enough of an abstraction for distributed computing to hide whether functions are running on different threads of a single processor or on different processors. To do so, the languages need to use a distributed model that doesn’t involve shared memory. Instead, message passing is used for most communication, and any data that is shared must be made persistent ...