Bartosz Milewski Missing post
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu May 28 17:52:05 PDT 2009
Bartosz Milewski wrote:
> Andrei Alexandrescu Wrote:
>
>> BCS wrote:
>>> Everything is indicating that shared memory multi-threading is
>>> where it's all going.
>> That is correct, just that it's 40 years late. Right now everything
>> is indicating that things are moving *away* from shared memory.
>>
>> Andrei
>
> I understand where you stand. You are looking at where the
> state-of-the-art hardware is going and that makes perfect sense.
> There is, however, a co-evolution of hardware and software that is
> not a simple software-follow-hardware (remember the era of RISC
> processors?).
I understand that. However, I don't understand how the comment applies
to the situation at hand.
> I'm looking at programming languages and I don't see that
> away-from-shared-memory trend--neither in mainstream languages, nor
> in newer languages like Scala, nor in the operating systems.
Scala doesn't know what to do about threads. The trend I'm seeing is
that functional languages are getting increasing attention, and that's
exactly because they never share mutable memory. As far as I can see,
languages that are based on heavy shared mutation are pretty much dead
in the water. We have the chance to not be so.
> There
> are many interesting high-level paradigms like message passing,
> futures, actors, etc.; and I'm sure there will be more in the future.
> D has a choice of betting the store on one of these paradigms (like
> ML did on message passing or Erlang on actors) or to try, build solid
> foundations for a multi-paradigm language or do nothing. I am trying
> to build the foundations.
Building foundations is great. What I'm seeing, however, is one very
heavy strong pillar put in a place that might become the doghouse. I'm
not at all sure the focus must be put on high-level race avoidance,
particularly given that the cost in perceived complexity is this high.
> The examples that I'm exploring in my posts are data structures that
> support higher level concurrency: channels, message queues, lock-free
> objects, etc. I want to build a system where high-level concurrency
> paradigms are reasonably easy to implement.
>
> Let's look at the alternatives.
>
> Nobody thinks seriously of making message passing a language feature
> in D. The Erlangization of D wouldn't work because D does not provide
> guarantees of address space separation (and providing such guarantees
> would cripple the language beyond repair).
Why wouldn't we think of making message passing a language feature in D?
Why does message passing need erlangization to support message passing?
> Another option we discussed was to provide specialized, well tested
> message queues in the library and count on programmers' discipline
> not to stray away from the message passing paradigm.
That's not what I discussed. I think there is is an interesting point
that you've been missing, so please allow me to restate it.
What I discussed was a holistic approach in which language + standard
library provides a trusted computing base. Consider Java's new (for
arrays) and C's malloc. The new function cannot be defined in Java
because it would require unsafe manipulation underneath, so it is
defined by its runtime support library. That runtime support is
implemented in the likes of C. However, due to the fact that the runtime
support is part of Java, in fact Java does have dynamic memory
allocation - and nobody blinks an eye.
C has famously had a mantra of self-sufficiency: its own support
libraries have been written in C, which is pretty remarkable - and
almost unprecedented at the time C was defined. For example, C's malloc
is written in C, but (and here's an important detail) at some point it
becomes _nonportable_ C. So even C has to cross a barrier of some sorts
at some point.
How is this related to the discussion at hand? You want to put all
concurrency support in the language. That is, you want to put enough
power into the language to be able to typecheck a variety of concurrent
programming primitives and patterns. This approach is blindsided to the
opportunity of defining some of these primitives in the standard
library, in unsafe/unportable D, yet offering safe primitives to the
user. In the process, the user is not hurt because she still has access
to the primitives. What she can't do is define their own primitives in
safe D. But I think that's as useless a pursuit as adding keywords to C
to allow one to implement malloc() in safe C.
> Without
> type-system support, though, such queues would have to be either
> unsafe (no guarantee that the client doesn't have unprotected aliases
> to messages), or restrict messages to very simple data structures
> (pass-by-value and maybe some very clever unique pointer/array
> template). The latter approach introduces huge complexity into the
> library, essentially making user-defined extensions impossible
> (unless the user's name is Andrei ;-) ).
Complexity will be somewhere. The problem is, you want to put much of it
in the language, and that will hit the language user too. Semantic
checking will always be harder on everyone than a human being who sits
down and implements a provably safe library in ways that the compiler
can't prove.
> Let's not forget that right now D is _designed_ to support
> shared-memory programming. Every D object has a lock, it supports
> synchronized methods, the keyword "shared" is being introduced, etc.
> It doesn't look like D is moving away from shared memory. It looks
> more like it's adding some window dressing to the pre-existing mess
> and bidding its time. I haven't seen a comprehensive plan for D to
> tackle concurrency and I'm afraid that if D doesn't take a solid
> stance right now, it will miss the train.
I think we can safely ditch this argument. Walter had no idea what to do
about threads when he defined D, so he put whatever he saw and
understood in Java. He'd be the first to say that - actually, he
wouldn't tell me so, he _told_ me so.
To me, adding concurrency capabilities to D is nothing like adding
window dressing on top of whatever crap is there. Java and C++ are in
trouble, and doing what they do doesn't strike me as a good bet. You're
right about missing the train, but I think you and I are talking about
different trains. I don't want to embark on the steam-powered train.
Andrei
More information about the Digitalmars-d
mailing list