Hacker News new | ask | show | jobs
by mhh__ 2712 days ago
Yes. D metaprogramming is so fucking good that it's easy to do well.

It's really obvious, and even at it's worst it's no worse than C++ (Except much easier to debug due to D's much less fundamentalist type system).

I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.

But to each their own, etc.

3 comments

> I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.

The don't really take the features away, they move the problem to a proper templating/code generation language. These are language neutral so you don't have to learn a different one for each language, they are often more powerful too. IME the code they generate is a lot easier to deal with than templated code.

In D, you can run full code at compile time and then include that string into the file: So it is it's own code generation language.
> even at it's worst it's no worse than C++

I can't think of a language whose metaprogramming features get abused worse than C++, so saying it's not worse isn't really heaping praise.

I was really referring to the error messages, because you can write C++ style templates (e.g. SFINAE) in D but no one does because D was designed properly so it has proper traits etc. C++ style template messages are uncommon but possible, however D is much much easier to debug because the type system is working with you and basically available in the language - in the sense that you can use traits and reflection to work out what went wrong (as opposed to

stdin. byLineCopy.array.sort!((a, b) => a >b).each!writeln;

This example is everyday code in D, but basically unthinkable in C++ (Possible but try getting it that short without writing your own library). It is also telling that the aesthetic style of the above code (UFCS) is a feature D has had for years but was rejected for inclusion into C++ despite BS backing it.

Ok, it encourages magic. That's what I wanted to know.
Good magic, bear in mind: It's usually really obvious how it works, unlike C++.