Why is D unpopular?

arco qva6y4sqi at relay.firefox.com
Mon Nov 8 01:36:59 UTC 2021


On Sunday, 7 November 2021 at 09:18:37 UTC, Ola Fosheim Grøstad 
wrote:

> Yes, I think you get this response because people have written 
> successful applications for things like micro-services. But 
> there is a difference between being usable and having solid 
> support.

It is a very common response when people are enthusiastic about a 
particular technology. People for whom using D is a goal in 
itself are using it, but the others are not going to move to it 
for the sake of using D. They would do it if D solves some 
problems they are currently facing, or if it allows them to 
achieve their own objectives (which are probably unrelated to D) 
better than some other alternative.

> So the real challenge for D is focusing and providing solid 
> support for something specific. I think everyone understands 
> this. People who use D in professional contexts seems to be ok 
> with creating their own frameworks, which requires dedication.

But there are two aspects to this where in my opinion D is 
currently failing and both are more cultural than technical. That 
D "can" do something is not enough; that someone successfully 
wrote some app in D doesn't mean D is a good choice for that 
application field. Like any language, D must not just be good at 
something, it must be the best at something. It's fair to say 
that currently it isn't. The dlang community wants to push static 
if etc. as their killer feature but it seems that more often than 
not, it elicites a "meh" reaction.

The other problem is that D seems deeply allergic to making hard 
decisions. From reading this forum it seems to me that the 
overall attitude within D is that it should offer choices, not 
enforce decisions. But in the real world, that's often a bad 
thing. Another language with the same mantra was Perl. Look at 
what happened to Perl the moment we got Python, Ruby etc. 
Enforcing decisions is a Good Thing: it ensures that people 
understand each other's code, that analysis tools can do a much 
better job, that people won't roll out their own error management 
that doesn't work together with someone else's, that there will 
be consistency in memory management, etc etc etc. Once again, the 
two languages somewhat comparable to D that "made it", Go and 
Rust, are all about enforcing what they deemed to be their way to 
do things. That doesn't mean it's the only legitimate way, but it 
means that if you want to do X, this is how you do it in Go (not 
that there isn't a one true way, but you are free to try to 
devise 15 different ways). And if the Go way doesn't work for 
you, that's perfectly fine, there are other languages that would 
be a better fit for your problem. Same for Rust.

This is a hard lesson that D desperately doesn't want to learn. 
By trying to appease everyone it ultimately doesn't win for 
anyone in particular.


> As of today D is for programmers with a high level of 
> dedication. That basically puts D in the same category as C++ 
> and Haskell, but not in the same category as Go, Python, Java 
> etc.

Not really. C++ has a huge wealth of frameworks, IDEs, tools and 
libraries that make its strength. Plus ever since C++11 it has 
been dedicated to recognising and attempting to fix its problems 
(although the solutions are often a kind of placebo: there is no 
way to ensure, for example, that unique_ptr is really unique, or 
that an object won't be accessed after std::move). I personally 
dislike C++ with a vengeance, but if you develop in C++, you will 
never be on your own. Not so with D.

Haskell is a different beast altogether. It's a niche language 
that knows exactly what it wants to be and especially what it 
doesn't want. It's the perfect solution for a specific area of 
problems. Which illustrates the discussion above.

> That there are fewer programmers with a high level of 
> dedication to a single language should not surprise anyone.

Of course. But why should they? A language is nothing more than a 
tool. Carpenters are dedicated to building furniture, not to 
using a hammer.

> What does "GAT" and "HKT" mean?

[Generic Associated 
Types](https://blog.rust-lang.org/2021/08/03/GATs-stabilization-push.html).

HKT = Higher Kind Types. GATs are a subset of HKTs.


>
> Doesn't seem to be better than C++20 in that regard? How is 
> Rust's error handling sophisticated?

In several ways. Rust has proper sum types and a "match" 
statement that guarantees that all cases are covered (plus it has 
functional semantics). That alone makes it more general and safer 
than C++. It also has some syntactic sugar (like the ? operator) 
and the pseudo-monadic methods and_then etc. that together make 
it basically as easy to use as exceptions. But it has also the 
advantages that since all errors are in-band values, they are 
friendly towards multithreading and parallelisation. With the 
Rayon library (which provides parallel iterators) you can for 
example write something like:

```
let results = data.par_iter().map(|v| 
process_value(&v)).collect();
```

This will run process_value() in parallel on all elements of the 
data collection. If process_value() can fail (= it could throw in 
D or C++), it will return a Result. You will get a collection 
(like a Vec) of Results and you will be able to check which ones 
have succeeded and which have failed.

Using exceptions in multithreaded code is... no comment.

>
> Go is ok for tiny applications that fits well to their standard 
> library, but the language does not seem to scale very well. I 
> am not so sure about productivity. I want to see that measured 
> in terms of long term evolution and maintenance.

It seems that those who use Go, Google to begin with, beg to 
disagree that it's just for tiny applications. As for whether it 
scales well, its long term evolution and maintenance... how do 
you think it compares to D as far as hard data and proof of the 
pudding are concerned?

> And its biggest disadvantage. However now that type annotations 
> have been added, you basically have gradual typing in Python, 
> which is very productive.

Of course it's also a big disadvantage. But notice the pattern: 
Python is dynamic - type annotations don't change that, it can 
still alter classes at runtime, reflect etc. It made that design 
choice and tries to offer developers all the benefits that go 
with it. And where it's not suitable, then you simply don't use 
Python.

> Moving target. You need vast resources to address the 
> continuous changes on mobile platforms. The graveyard for 
> mobile cross platform frameworks is enormous! It is improbable 
> for D to succeed in this field.

It needn't be improbable. Kotlin was born as a third party 
project, like D but smaller. Google saw its benefit for Android 
development and embraced it wholeheartedly. It could have been D 
instead (and IMO it would make a nicer Android language than 
Kotlin). Making D target the JVM shouldn't have been a big 
problem. What was and still missing is consistency, well defined 
features that make sense for a stated goal, excellent tools and 
documentation and community dedication (to the application field, 
not to the language as such).

> D is retaining the disadvantages because features are being 
> replicated from other languages rather than reinvented. If you 
> want to combine low level programming with high level 
> programming you need to go further away from the mainstream 
> than D. (E.g. choose the actor model).

You are onto something there. Maybe an interesting and promising 
direction for D would be to get inspiration from Erlang as an 
actor-based application language, but with full C 
interoperability and a generally more conventional (and thus more 
approachable) language design. But once again, it needs to make 
the choices that are consistent with that, in full knowledge that 
it means saying NO to those features that aren't, and keep on 
track. It also requires a deliberate and long term community 
building effort. Go does it and Rust does it, but D still seems 
to believe that "if you just make a compiler, they will come".


More information about the Digitalmars-d mailing list