www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Constraints & Concepts [Was: Re: C++0x news]

reply bearophile <bearophileHUGS lycos.com> writes:
Andrei Alexandrescu:

 you'd have to understand the reasons that made concepts unsuitable
 for C++0x and then work out ways to make concepts work for D.

I don't know exactly why they have refused Concepts, but to refuse them after so many years of developments and discussions (and ConceptG++, many nice papers written about their usage, etc) then they have good reasons. You are right, better to not go there, even if it's seducing stuff.
 Detecting mistaken use of concepts is practically very easy - just write 
 a type that implements the concept vacuously and then instantiate the 
 tested template against it in a unittest. I sometimes do that to test my 
 range-based code.

Thank you for this interesting suggestion, I'll try it. In the meantime I have found a Boost docs page about the same topic, I think their 'archetype class' is the same thing you are saying me: http://www.boost.org/doc/libs/1_42_0/libs/concept_check/concept_covering.htm Bye, bearophile
Mar 22 2010
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 03/22/2010 02:09 PM, bearophile wrote:
 Andrei Alexandrescu:

 you'd have to understand the reasons that made concepts unsuitable
 for C++0x and then work out ways to make concepts work for D.

I don't know exactly why they have refused Concepts, but to refuse them after so many years of developments and discussions (and ConceptG++, many nice papers written about their usage, etc) then they have good reasons. You are right, better to not go there, even if it's seducing stuff.

It's a long story. I think I'd summarize it by saying again: just like in chess, in PL design ignoring the whole for the beauty of the part is a capital mistake.
 Detecting mistaken use of concepts is practically very easy - just
 write a type that implements the concept vacuously and then
 instantiate the tested template against it in a unittest. I
 sometimes do that to test my range-based code.

Thank you for this interesting suggestion, I'll try it. In the meantime I have found a Boost docs page about the same topic, I think their 'archetype class' is the same thing you are saying me: http://www.boost.org/doc/libs/1_42_0/libs/concept_check/concept_covering.htm

Yah, archetype-based checking was endorsed by Bjarne Stroustrup and myself (though my participation was negligible, so really I'm the only one claiming credit :o)). That proposal "lost" and concepts as ultimately proposed "won". If asked to speculate, I'd say that the other approach, if chosen, would have change the state of affairs dramatically. Andrei
Mar 22 2010