Gary Willoughby: "Why Go's design is a disservice to intelligent programmers"

Dicebot via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Mar 28 12:33:08 PDT 2015


On Saturday, 28 March 2015 at 19:16:32 UTC, Russel Winder wrote:
> If you write your software to fit a particular platform, 
> including
> hardware features, then you are writing an operating system 
> dedicated
> to that one specific platform and no other.

Yes and I believe writing dedicated specialized operating systems 
for certain network services ("OS as a library") is the future of 
high load server programming - at least in domains where you can 
afford the investment.

> If the idea is to write
> portable applications then:

"portable" and "fast network service" aren't really best friends 
:( I have to encounter a single project that even tries to 
achieve portability of server code..

> The very fact that people are writing in D (or C++, Java, C#,…) 
> means
> you have accepted some abstraction – otherwise you would be 
> writing in
> assembly language. Having made the jump to high-level languages 
> why
> baulk at a small overhead to abstract concurrency and 
> parallelism?

1) "some abstractions" != "any abstractions". One of reasons to 
use D as opposed to Java or C# is exactly because latter force 
you into overly expensive abstractions. D in its current state is 
closer to C++ in this context and this is huge selling point.

2) So far my experience has shown that overhead is not small at 
all. It depends on type of application of course.

> Making tasks lightweight processes rather than maintaining 
> shared
> memory, and using channels to move data around rather than using
> shared memory and locks, makes applications' concurrency and
> parallelism easier to construct and manage (*).

This comment makes me wonder if we really speak about the same 
things. Concurrency model based on pinned fibers/threads is not 
the same thing as getting back to 90s shared memory 
multi-threading madness.

"lightweight processes" - yes, pinned fibers are very lightweight
"channels to move data around" - message passing between worker 
threads

At no point I have proposed to use shared memory and locks, there 
is no objection here.

> If we are prepared to
> accept overhead for stack and heap management, we must accept 
> the
> overhead of processor management via thread pooling with work 
> stealing.

Custom allocators exist pretty much for the very reason that in 
certain cases heap management overhead cannot be accepted. For 
concurrency primitives stakes are much higher.


More information about the Digitalmars-d-announce mailing list