About whether D / rust / golang can be popular.

solidstate1991 laszloszeremi at outlook.com
Thu Nov 26 23:54:37 UTC 2020

On Thursday, 26 November 2020 at 05:46:59 UTC, zoujiaqing wrote:
> Whether a programming language can be popular depends on what?
> I think there are two important points, that is, killing skills 
> and availability. At the same time pay attention to 
> shortcomings.
> I'll talk about my opinion today.
> ## D
> Must kill skill: It looks good?

It has four main advantages:

- Metaprogramming. In C/C++ you're limited to what the 
precompiler can do, but D's metaprogramming capabilities are 
almost other worldly, save for a few small stuff. D currently 
doesn't have metaprogramming support for attributes, which could 
solve the issue of attribute hell, especially with containers.
- Fast compile times with the performance of C/C++. Even with DMD 
and using the GC, it not only outclasses most scripting 
languages, but while compiling faster than C/C++. Once someone 
takes the time to optimize the D code by reducing GC use and 
using some compiler that has better optimization like LDC, it 
becomes nearly indistinguishable from C/C++. This, alongside its 
super-easy interoperability with other languages, makes the 
language a good candidate for a low-level scripting language.
- Interoperability. It's mostly binary compatible with C and C++, 
almost seamlessly can load their libraries, etc. I don't know 
what's the current state of D's DLL support, if anything this is 
a point where it must get better. D's main advantage should be 
either integration into other projects, or integrating 
preexisting ones into a D project.
- Multiple supported paradigms. Single paradigm programming is a 
pitfall, which leads to forcing the same solution to every 
problem, which in turn will lead to over-complicated codes, like 
how "enterprise" devs often do object orientation on everything. 
While functional programming is very promising, in itself can't 
solve all the programming problems, and can lead to performance 
issues from frequent data copying.

> Availability: standard library is poor.

It actually starts to get better, and since the language easily 
interoperates with others, anybody can port C or C++ headers to 
D. My current gripe is the mediocre XML support currently on D. 
The current one in the standard library

> Bad IDE.

It's okayish, but there's a lot of potential to growth.
- For the code-d team: Do something about the lack of refactoring 
support! It's super annoying to rename each thing individually, 
since VSCode's "change all" feature is too overboard and only 
works within a single file.
- For the Visual-D team: Please, add some integrated dub support! 
It's the default package manager of D, and without it you're 
destined to deal with dependency hell.

Due to the sheer power of the metaprogramming feature, any IDE 
plugin must at one point integrate the DMD frontend. That's 
probably the only way to get the whole metaprogramming fully 
cooperating with IDEs.

> GC efficiency is low.

Not anymore, as the GC is now multi-threaded. `@nogc` and 
`nothrow` attributes are must haves at functions that are 
time-critical and where they're applicable. Reducing memory 
allocations is a good practice, no `malloc` will speed up your 
application if you need to allocate memory thousands of times in 
a short time, while you could work on the same preallocated 
memory location.

> Lack of friendly debugging tracking tools.

Visual Studio works well as a debugger, but memory access 
violations are a bit hard to trace down sometimes. Breakpoints do 
work however.

> Lack of pprof and other practical tools.

It is in a dire need of a GUI editing tool, but I've made one for 
my own graphics engine. I'm planning on making another one, might 
be a VSCode plugin, if not it'll be a standalone app. That will 
be a pretty big breakthrough, however I don't know yet what GUI 
framework should I target. Maybe I can even add D export 
functions to a preexisting one.

> ## Summary
> D language must improve usability if it is to become popular!

D must become even stronger in fields it's already strong, and 
the community must fix the stuff where it's currently weaker. 
I've outsourced many of the components of my game engine to 
external libraries, both to allow easier unit testing (which 
ultimately killed the integrated collections - it was quite 
difficult) and to allow others to use them. Currently most of D's 
issues can be traced back to a weaker community, but this is 
slowly changing.

More information about the Digitalmars-d mailing list