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