bearophile wrote:
According to this article, the only hope for the future of efficient
programming is going all the way toward immutable data (with a functional
programming style, I presume):
http://enfranchisedmind.com/blog/2009/01/02/the-problem-with-stm-your-languages-still-suck/
There was a good article in Communications of the ACM about
transactional memory a few months ago that discusses its problems in
greater detail, but that blog article is in the right ballpark. The
short answer is that it's a neat idea with potential, but it does have
some fundamental problems that make it not ideal for a lot of applications.
I don't know much still about this topic, but I think a compromise solution may
be possible/better: the whole global program may be purely functional, where
all data/objects are essentially immutable. But there can be kernels (generally
methods/functions) that are mostly meant to run on a single CPU for a short
time that inside use locally mutable data and procedural code (they can be like
pure functions in D2).
This is what I've been saying for years. I think it's where we're headed.
I think today there are no languages that allow this, designed for this type of
mixed programming (If you know of a language like that please tell me. I think
Scala and F# are different).
Erlang /might/ be in this category, if only because it's a functional
language with some support for mutable data. But realistically, it's
more likely that some processes in an Erlang app would be written in C,
with the requisite message passing between them and the Erlang app.
Can D2 be programmed like that? Probably not, it requires a different kind of
compiler (able to compile typical FP constructs more efficiently), and a
different mindset for the programmer.
Since it's possible for mutable code to call pure code but not
vice-versa, I think D2 is designed somewhat the opposite of what you're
suggesting. But since even pure code can use local mutable data, the
picture isn't quite so clear. Toss in monads for system operations and
D2 may just be able to do this sort of thing. The outstanding question
is whether the syntax and such will make it appealing to do so. I
personally haven't done enough FP in D to say.
Sean