Why D is annoying =P

Mehrdad wfunction at hotmail.com
Wed Oct 24 13:16:27 PDT 2012


On Wednesday, 24 October 2012 at 20:03:44 UTC, H. S. Teoh wrote:
> What's wrong with RedBlackTree? You can just do something like:
>
> 	RedBlackTree!(RedBlackTree!MySet) setOfSets;


The last time I checked two RedBlackTrees for equality, they 
seemed to have reference semantics...


>
> [...]
>> So you can't really write a real program in D, to put it 
>> blunty.
>
> That's a bit harsh.

Sorry, just saying what I experienced :(

> It's not hard to write your own hash implementation in D

I beg to differ, see below

> given the expressiveness of its templates and compile-time 
> features. The bugginess of the built-in AA is lamentable, 
> definitely, but it doesn't *prevent* you from writing your own 
> data structures.

It does. There's simply no mechanism to hash an arbitrary thing 
in D.

(hashOf, which Andrej just mentioned, is an internal thing, 
right? aka a hack, which I was not aware of)


> All programmers worth their salt should be able to roll their 
> own where the current implementation is inadequate, anyway. ;-)


Well, there's different issues involved...

- Can I? Yes.
- Will I? No, it takes more time than it's worth

> In any case,  as they say in the open source community, patches 
> are always welcome.

Yeah, it's just that I can't figure out even the basics of 
hashing in D (above), so I can't really patch something because 
then it'll turn out to be working in a different way than I 
expect.

> It only takes 15 minutes to write your own opEquals() in a 
> struct that wraps around an AA

I've spent longer than that right now and still haven't been able 
to (but I haven't tried the hashOf hack yet).



Maybe you can fill in the blanks?


struct Set(T)
{
	int[T] dict;
	hash_t toHash() const
	{
		typeof(return) r = 0;
		foreach (item; this.dict.keys)
		{
			???       // what should be here?
		}
		return r;
	}
}



More information about the Digitalmars-d mailing list