
Greer, Joe wrote:
From: David Abrahams <dave@boost-consulting.com>
Rob Stewart <stewart@sig.com> writes:
When classifying types, it is often necessary to test for any one of several variations of an aspect. A common case is ignoring an aspect which means to allow a match for any variation of that aspect
Please excuse me for jumping into the middle of this discussion. I am only a budding metaprogrammer, so that influences how I read things like this, so bear with me. With this phrasing,
I don't believe it's metaprogramming specific -- let's clear up the logic, first:
it is unclear to me whether the common case is "ignoring an aspect" or if it is really "allowing a match for any variation of an aspect"
Given a variable 'a' which can be either '1', '2' or '3' it doesn't make a difference: if ((a == 1) || (a == 2) || (a == 3)) // match any variation of a { // do something } is logically equivalent to // no if -- just ignore a { // do something }
which I can do by "ignoring an aspect."
Equivalence is commutative: You can ignore 'a' by allowing any variation and you can allow any variation by ignoring 'a' -- no difference, again. Making any difference would be talking about implementation details in a parapraph about plain logic.
Neither quoted sentence seems long or complex. Perhaps there was something you snipped to which you were referring?
Here's the full text of my suggestion:
When classifying types, it is often necessary to test for any one of several variations of an aspect. A common case is ignoring an aspect which means to allow a match for any variation of that aspect and is only useful when also testing for other aspects. Ignoring an aspect means using an "unspecified_*" tag. For example, allowing a match for any decoration requires using the <tt>unspecified_decoration</tt> tag.
I have the following problems with this: - it's too long - 80% focusses on a special case - it's not true that it only makes sense when testing for other aspects
In this paragraph, you are telling me that "ignoring an aspect" is "allow a match for any variation of that aspect" (sentence 2) and that "ignoring an aspect" is "using an "unspecified_*" tag" (sentence 3). The use of "means" in both sentences is awkward. It is also unclear that "allow a match for any variation of that aspect" is actually the same as "using an unspecified_* tag."
I tend to be more conversational in my writing, but I would be tempted to write something like:
When classifying types, it is often necessary to test for any one of several variations of an aspect. A common case is allowing a match for any variation of an aspect. This is done by ignoring that aspect and is implemented by using an "unspecified_*" tag. For example, to allow a match For any decoration would require using the <tt>unspecified_decoration</tt> tag.
This one suffers similar problems:
I just wanted to throw in my $.02. I'll go back into lurker mode now. :)
OK, here is my current top-candidate: When classifying types it is often necessary to match against several variations of one aspect. There are special variations which make this possible. These are called *abstract*. The most important case is to match any variation; that is, to ignore that aspect in the context of type classification. Because of this, every aspect has at least one abstract variation named "unspecified_" plus the aspect name.