A few notes on choosing between Go and D for a quick project

Carl Sturtivant via Digitalmars-d digitalmars-d at puremagic.com
Tue Mar 17 14:16:37 PDT 2015



Characterizing the problem as "Go versus D" is framing it to D's 
disadvantage. Broadly speaking Go is one thing & D is many things.

The whole difficulty with D encountered by a person choosing 
which of (e.g.) Go and D to use lies in this difference. D as a 
whole is overwhelming in this situation.

D may be spoken naturally in many different ways. This is its 
strength. We need to make this strength accessible to outsiders. 
If an outsider can speak D at first in a way somewhat familiar 
from their previous experience, that will provide accessibility.

We may classify outsiders as coming from C, C++, Java, Python, Go 
and more. Make your own list.

Each kind of outsider needs to see an approximate reflection in D 
of the machinery of their usual means of expression and its 
attendant conceptual models, plus exciting possibilities to 
improve and extend these. This reflection must be made workable 
on all scales, from details of idioms and techniques up to the 
big picture.

An outsider needs a well developed specialized way in! One that 
is designed for that specific class of outsider. Given such, in 
the short run the D written by one class of outsider will be 
quite different in its use of the language to that written by 
another, which will be quite different again to that written by 
contributors to phobos.

We should accept this. They may expand their horizons within D 
later. The community may find ways to help such people do this, 
for example by gently suggesting better parts of D to use for 
technical parts of their purposes when they post to the forums. 
In the meantime they have come to D because there was a 
relatively efficient way for them to do that, not a bewildering 
collection of possibilities that deflected them to the 
certainties of the overly prescribed ways of (e.g.) Go.

Now consider outsiders from C, C++, Java, Python, Go.

I'll leave you to consider C, C++. The articles
   http://dlang.org/ctod.html
   http://dlang.org/cpptod.html
   http://dlang.org/pretod.html
have made a detail-oriented start with tacit assumptions about 
what is going on at wider scales. These languages are closely 
entangled with D's development, and so are special cases given 
better treatment. These could be expanded into an entire 
introduction to D for C outsiders and an entire introduction to D 
for C++ outsiders.

Java is not too hard especially given the design of D's classes. 
Java is almost a small sublanguage of D.

Python and Go are harder. But D is a system programming language 
with [long list of powerful abstraction facilities, many 
supported paradigms, "wonderfulness of D"]. And as such one may 
hope it is possible to arrange to program in D in Pythonesque or 
Goish ways. Especially if this provides a way for D to win rather 
than lose out to these languages, by providing an incremental way 
in.

The yield facility in Python can serve as a first example here. 
This is not a part of the D language. The Fiber class in 
core.thread can be made to emulate it with additional 
superstructure with some effort. But this is exactly the kind of 
effort an outsider from Python is not immediately equipped to 
make. Go's goroutine and its attendant machinery could be 
examined with a similar end in view.

What all of this suggests is that some library code may need to 
be written to accomodate the way into D for a class of outsiders. 
The administration of where such goes needs to make it simple to 
import with a standard D installation. And if D is too inflexible 
to provide something important via a library, as is possibly the 
case with yield, serious consideration should be given to (don't 
scream) adding it to the language.

In conclusion, D is not gaining the traction it deserves as a 
potential lingua franca. I am making the case that we need to 
treat it as several programming languages for the purpose of 
making it rapidly usable by typical outsiders. D-python, D-java, 
D-whatever --- facets of D.

This entails library additions, and possibly language additions. 
This entails a lot of writing of documentation, in effect a small 
book for each facet of D.

There is much to be decided about how this could be best done. I 
will not pursue that here. But I do believe something 
approximately like this is the only way for D to start to win out 
when someone decides whether to use (e.g.) Go or D in a new 
situation, or even whether to use D or stay back in Python with 
all of its disadvantages. The complex cliff face of D needs some 
overtly navigated paths for all kinds of explorers.


More information about the Digitalmars-d mailing list