Distributed Computing And Computer Languages
Larry in this excellent post blogs about the issue between a language and its uses. He quickly describes the issue between a language and its domain specific attributes and point out how much the effort has shifted from language development to framework. He gives the example of Prolog between C to show how those languages work on different issue. (By the way, have you seen Prolog code in production?)
I could not agree more on this and his idea of the shift from single core to multi-core CPU. I would even add that OpenMP (or others framework) are clearly impractical: too complex to learn, to use and to debug. And not addressing all issues raised by distributed computing (ie: which consistency is needed?).
A language is a trade-off between specific use cases (ie: embedded system in Java) and a broad abstractions (ie: synchronized in Java). For instance, Erlang has not been embraced as a general language but solve the threading issue. Erlang is not seen as a good general language (for a lot of reasons).
No language offers yet powerful high and low level abstraction to manage multi-processor. You could use a framework (openMP) for those, but since it is a central feature of a modern language this needs to be in the language construct. It allows you to get more information on the context and build cleverer code.
Currently, I know only of Erlang, Java and Ada to offer some sort of high level concurrency management. But a developer is not an expert in distributed system. Most patterns of distributed codes is known (where to add a mutex, a guard condition, …) and could be added automatically by the compiler with the right language construct.
More to follow on this…
