On Sat, 15 Mar 2008, Mark E. Mallett wrote:
Except that I made no suggestion that they be tied, and I even said that
I liked the fact that the test(*) doesn't depend on variables. What I
opined was that the draft could state what the behavior would be in the
presence of the variables extension
One barrier to implementing sieve extensions is exactly that the
intersection of two extensions may require special handling. While this
is true by necessity for match-types and comparators, we should fight the
tendency to add special cases for other combinations that aren't
completely necessary.
-- analogous to how it already
states what the behavior is in the presence of the relational extension.
Not that it require variables.
This particular special case seems unnecessary to me. It appears to have
been inherited or based on the similar exception for the 'envelope' test.
IMHO, that behavior should not be propagated to 'environment'. If you
want to test whether an environment item returns the empty string, then
just do exactly that!
if environment :is "foo" ""
My opinion is that the correct model for relational's :count is that it
tests against "the number of distinct entities that would otherwise be
matched against". I.e., it's the number of different strings that could
have been matched by <<:matches "*">>. The count will be zero iff there
were no entities to match against.
For environment, that would mean that the count will be zero if the item
does not exist. The current draft's exceptional handling of empty strings
is a wart that does not increase the expressiveness of the test and should
be removed.
(Stepping further up the abstraction ladder: a test command defines how to
generate a set of zero or more strings. The comparator and match-type
arguments then define how that set of strings is matched against the keys.
The :count match-type says "take the decimal representation of the
cardinality of the set of match strings, collate (order) that against each
key using the indicated comparator and return true if they collate in the
direction indicated by the relational-match argument." When we define new
test commands, we should *ONLY* be specifying how it generates a set of
strings to match against.)
Philip Guenther