My choice to pick Go over D ( and Rust ), mostly non-technical

Benny benny.luypaert at rhysoft.com
Fri Feb 2 15:06:35 UTC 2018


First of all, please do not repost this on Reddit or any other 
forum. This is focused for the D community alone to help deal 
with internal issues and it does not need to be ridiculed as this 
is a personal opinion.

As some have seen my posting in the past week regarding D, i like 
to explain my reasoning. I have been looking for the language to 
use for my next project, one of them was D.

But the choice was more or less between Rust, D and Go. As all 3 
offered good multi-platform support ( essential ), fast, low 
memory usage.

It came down to a list of criteria. I will mostly focus on D and 
Go as mentioning Rust too much will simply sidetrack the post too 
much.

HTTP:

D has no default HTTP server. So you need to rely on vibe.d. 
Vibe.d being a external package that then relies on a few people 
to maintain it.

D has no future proof HTTP. There is currently no official http2 
build in to vibe.d. Test branches do not count ;)

Go is the only one in the short-list that has a default HTTP 
solution that is well tested by loads of people, is fast ( 
especially with pre-fork ) and future proof.


Performance:

When it comes down to anything HTTP related unfortunately D is 
lagging behind on this part. Especially vibe.d

www.techempower.com/benchmarks/previews/round15. The techempower 
is just as example.

My own tests show the same performance issues where D at minimum 
to a un-preforked Go loses over 30% in real life, network tested 
benchmarks ( not some silly local device benchmarks that most 
people do ).

It also shows D has a higher CPU usage for the relative lower 
performance. Pre-forking Go increases the CPU usage but also 
performance.

All of my own tests are done with LDC ( optimized flags ) not DMD.

Sure, benchmarks are the devils breath but it makes no sense 
building a application that even with database queries are slow 
compared to the rest.


Build:

DMD is fast, no doubt about it but Go is just instant in my case 
for the same type of content i need ( Go HTTP vs D vibe.d ).

Other issues in my past with D also did not help, namely the 
regressions and constant bug-fix releases.

Its time for D to figure out a stable API. Its really bad when 
one compiles editor plugin code and sees "deprecated function" 
all over the output.

How up to date is the https://dlang.org/deprecate.html even?


Community / Code examples:

D has a nice community here on the forum but out in the real 
world "the internet" D is more or less non existing.

Google searches end up so many times back to this forum with a 
LOT of outdated code going back 5+ years, what does not work 
anymore as API changes happened.

The fact that a lot of code out there is old or non functional is 
a issue. Worse when 80% of the search results end up in this 
forum, showing that D does not have a very broad community.

I do not deny that D is used by some big companies as a C++ 
replacement but the impression is that those are mostly closed 
source projects where very few code surfaces on the web.


Package support:

Again ... D has very few packages and a LOT of them are frankly 
so old that they do not work properly anymore with the current 
DMD versions. Deprecated functions galore.

If D had 1195 active, well supported high quality packages but it 
has not. Most packages at best have one decent package and that 
is it.

You want to produce PDFs? fpdf 2015-Apr-06, a very limited PDF 
generation tool last updated 3 years go.

You want to produce Excel's? Excel-d but it faces the same issue 
as being the only native project. What if the author ...

GRPC? Imap? ...

As i post this code.dlang.org is down so no more comparing. *sigh*

https://github.com/avelino/awesome-go
https://github.com/zhaopuming/awesome-d < missing Excel-d

Just looking on Github for D vs Go packages. 323 vs 15,351 (dlang 
vs golang) ... This is again related to popularity and community. 
So there is much more chance for finding something exotic as a 
base project in Go then ever in D.


Windows support:

But unlike D, Go's Windows support is simply better.

Plugins work out of the box with VSC. It has its own Jetbrain IDE.

Is Go perfect, no...

Dealing with Gopath is stupid. Who's idiotic idea that was 
instead of managing simply by project location.

Its no fun dealing with the Go Sqlite plugin ( what is 3th party 
) on Windows but then your are in actual production doing 
something, not fighting D to get your IDE working. Or fighting 
dub versions when LDC and DMD are both installed and in the 
environment path.

The amount of strange issues, not bugs or cross platform support 
issue that crosses D Windows users, simply leaves a bad taste.


Windows / Community issues:

 From a persona point of view, its tiring with some people looking 
down on the fact that i use Windows and have true issues related 
to D. That have been reported and helped fix but its a never 
ending stream of fixing one thing, running into another. 
Currently need to fall back to D 77.1 because of "issues".

But let me say this:

D has a nice community IF you fit into the mold. As a Windows 
user i am frankly fed up with people giving responses as "report 
it, fix it yourself" when it has been clearly stated that i do as 
much.

Or when a opinion is voiced about potential improvements, it 
comes down to "do it yourself or pay for it".

It is my personal opinion that:

* Do it yourself
* Pay for it
* Report it ( when the author has stated that they did )

Those comments add nothing to any discussions, they sidetrack 
discussion and only alienate people. Just do a google search and 
its horrible how many posts show up with this type of comment or 
variation.

Some people feel overly aggressive in defending D from criticism 
that it only alienates people. It has alienated me. Whenever i 
think about D, it positive feeling to move forward is always 
matched with dread thinking about some people or comments when i 
want to talk about issues.

The nice people here do not way up, to the people with a chip on 
there shoulder, that just ruin your day/mood.

It also does not help when comments boil down how "windows users 
do not contribute" when they actually do. Its very condescending 
and just scares away people.

At times i think that D is better served as a language with just 
a blog / news sections, a every expanding ( and up-to date ) 
examples section and better documentation and no forum at all.


Target:

I am personally confused with D's message.

* Are you targeting C++ developers?

 From my perspective most seem to be plenty happy with C++ 17. And 
they have the whole massive tooling, debugging and IDE support 
already. Given D its tooling, IDE and other issues, you really 
expect to draw developers away?

* Are you targeting Script language developers?

Missing HTTP solution, no easy CGI solution, .. it feels like 
there is much missing in terms of convincing for what script 
language developers are used too.

* Are you targeting C developers?

Sure BetterC is a way towards that but again, what do you offer 
more then Rust? I see C developers more going for Rust then D on 
this point. Or hell even Zig or Jai or whatever 3 letter flavor 
of the month language.

* Are you targeting people new to programming?

 From my perspective it does not even look like people with a 
lacking in programming skills are even welcome here. Everything 
is build around the idea of people with previous higher level 
programming skills. Discussions about ideas that tend to be so 
complex that anybody without a higher level programming 
background will simply say: "No, do not understand a darn thing" 
and they look for easier solutions.

* Are you targeting Go, Crystal or new language developers?

...

What is D even targeting? The kitchen and sink? It feels like D 
does not even know who its targeting. In my opinion the focus 
seems to be with C++ developers with most not giving a darn about 
D.

Go knows its not a system programming language, the focus is 
clearly more normal and web development. Even Rust has a much 
more clear message.

Other languages have slogans, they have selling points.

When i hear Go, you hear uniformal, fast, simple syntax language.
When i hear Rust, you hear safe, manual memory management.
When i hear D, you hear ... ... ... ...

Advantages:

D has a lot of advantages like CTFE, Generics, betterC etc over 
Go. But the resources seem to be spread so much over so much 
code, that information about how to properly use those Technics 
is spread thin.

As some wise people said in the past, use the tools you need for 
a project. And being a jack of all trades but master of non is 
not good.

It makes D its learning curve also much higher.


Conclusion:

In case people are interested, a personal list with 40 points 
that mattered to me. Each with a score ( Bad 1, Mediocre 2, Good 
3 ). As a way to create a impartial opinion just based upon my 
own needs.

75. Go
69. .Net
67. Rust
64. Pascal < This one surprised even me.
63. Crystal
60. D
55. Swift
51. Kotlin

60/D < Yes, it also came as a surprise. The issues like finding 
potential affordable employees ( or high training times ), the 
non existing default HTTP support, lack of packages, the lack of 
code and examples. And a lot of mediocre (2) scores really made D 
lower ranked then i expected. I gave every language as much 
leeway without overly focusing on one specific bad point. .Net 
ended up high but it was never a contender because of the memory 
usage, but it was still fairly judge on all other points. Same 
with Pascal ( talk about a surprise ).

The amount of issues that plague D go beyond the few i mentioned 
here and frankly will take years with a lot of manpower ( that D 
lacks ) to even sort out. I think D really missed the boat years 
ago because if it had a influx of people maybe 10 years ago, it 
will have been a whole different ballgame now.

Is Go perfect? Hell no ... but one needs to way the positive and 
negative. And to me it feels like Go has made more positive 
decisions that actually help people develop, then D on doing too 
much everywhere. Go is here to stay for the foreseeable future, 
where as D... not sure and that is scary.

I can go on about a whole lot of technical issue and be told how 
uninformed i am. There is nothing to gain going down that route 
as the non-technical issues really put a dampener on D already.

I am sure there will be lots of opinions regarding this post but 
its suffice to say that my decision to go with Go ( no pun 
intended ) is finally. I hope this final post is some indication 
of the issues that have plagued my decision process.


More information about the Digitalmars-d mailing list