Could we reserve void[T] for builtin set of T ?

H. S. Teoh via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 1 05:27:00 PDT 2016


On Fri, Apr 01, 2016 at 07:26:46PM +1100, Daniel Murphy via Digitalmars-d wrote:
> On 1/04/2016 6:24 AM, deadalnix wrote:
> >Pretty much as per title. I has that in the back of my mind for a
> >while.  Would that work ?
> 
> Don't forget that builtin AAs have been an epic disaster, and this
> would require an appalling amount of effort to implement in the
> compiler types, ctfe, druntime, new traits etc.
> 
> Phobos seems like a better place - and while not quite as concise, the
> syntax should still be pretty intuitive.

Yeah, having yet another language builtin is a bad idea, it complicates
the compiler and ties you to a specific implementation of sets. Why not
just Set!T instead, implemented in Phobos?

Sets behave pretty much like bit arrays, so for operations you can have:

	Set!T s1, s2, s3
	T e;

	s1.add(e);
	s2.remove(e);
	auto s3 = s1 | s2;	// union
	auto s4 = s1 & s2;	// intersection
	auto s5 = s1 * s2;	// cartesian product
	auto s6 = s1 - s2;	// set difference
	auto s7 = s1 ^ s2;	// symmetric difference

which gives us nice enough syntax for standard set operations, perfectly
implementable via operator overloading in a library.  (Note: above
operators are only suggestions.)

I don't think AA syntax is very well-suited for sets. (What on earth
is `set[x] = true` supposed to mean?! You want to add an element to the
set, not to set an element to true in the set. It doesn't make sense
mnemonically.)


T

-- 
What did the alien say to Schubert? "Take me to your lieder."


More information about the Digitalmars-d mailing list