On Wednesday, 11 February 2015 at 09:11:18 UTC, Jonathan M Davis
wrote:
We have a whole module full of them - std.traits - so we're
already using
that term in Phobos, whereas you won't find the term concepts
in there
anywhere. And you seem to be looking for exactly the same thing
except in
specific areas - ranges, containers, etc. - rather than having
all them
sitting in std.traits.
There is a difference between a concept and a trait. A concept
can be composed of multiple traits. In the context of a concept,
these traits could be called primitives.
Saying that `isInputRange` is a trait is just clumsy. It's a
checker template. You could rephrase it and say that it's a
checker template for the input range trait; but it doesn't check
for a single distinguishing quality[1], it checks if all of a
number of traits are present. Querying whether or not a type has
"the input range trait" is just plain linguistically awkward.
Using the term concept puts us in line with C++, the biggest -
perhaps the only - competitor D has in the field of template
metaprogramming, which surely aids learning. Indeed, even the
Wikipedia article on C++ concepts[2] seems like a good resource
for understanding the same idea we have in D.
[1] http://www.merriam-webster.com/dictionary/trait
[2] https://en.wikipedia.org/wiki/Concepts_%28C%2B%2B%29