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

Chris via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 18 07:15:14 PDT 2015


On Tuesday, 17 March 2015 at 21:16:38 UTC, Carl Sturtivant wrote:
>
>
> 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.

I think this is a good approach. The beauty of D is that it can 
be a lot of different things to different people. Do you have any 
examples yet, as in "D for Python programmers"? E.g. loops:

Python:
for item in list:
   print "The item is %s" % item

D:
import std.stdio : writefln;
foreach(ref item; list) {
   writefln("The item is %s", item);
}


More information about the Digitalmars-d mailing list