D dropped in favour of C# for PSP emulator

Chris Cain clcain at uncg.edu
Fri May 11 12:01:25 PDT 2012


On Friday, 11 May 2012 at 18:05:58 UTC, Mehrdad wrote:
> 1. "templates": they seem to take in just about anything, and 
> return just about anything. They can be pretty confusing, 
> especially when you have to worry about overloading vs. 
> specialization vs. constraints, or types vs. aliases...

I really have to disagree on this. I programmed in C++ for awhile 
and templates were always a huge stumbling block for me. The 
syntax didn't sync up for me and they were extremely difficult to 
implement well, which made any generic programming I attempted 
feel half-hearted (IMO).

When I started looking at D's templates, I was _afraid_ that it 
would be as much of a pain in the ass. After putting it off and 
shying away from it, I decided to dive in and discovered that 
they were significantly easier to work with ... and more 
importantly, it was nearly straightforward to implement them 
_well_. It's absolutely no problem specifying that data type with 
certain properties should use this function and everything else 
should use this other function. In C++, you have to learn 
complicated, arbitrary idioms such as SFINAE to get any serious 
work done at all ... and it looks like all of it was written in 
another language when you're done, making maintenance a nightmare.

It's not surprising that entire C++ books are dedicated to 
teaching the absurd complexities of C++ templates. If anything, 
my experience with C++ templates hindered me.

> 3. Ranges aren't confusing, but USING them certainly is.
>    ...
>    Consider: In C#, you say Array.BinarySearch(arr) to search 
> an array.

There's definitely not enough info on how to get stuff done with 
ranges. I knew about assumeSorted and the fact that 
std.algorithm.sort returns a sorted range, but only because I 
carefully combed through the libraries looking for stuff like 
that.

That said, the D way is actually very well designed once you 
discover it. Like Andrei said, the code clarifies its intentions.


Hilariously, this style also makes the code look more magical. 
You want to say something is unique and, thus, can be 
legitimately made immutable? assumeUnique. Oh, you want to have a 
memoized version of funct? memoize!funct. I leave my friends 
wondering how D knew how to do all this stuff just by being 
"told" to. Magic API, that's how.



More information about the Digitalmars-d mailing list