Executive summary:  User key collision is not a show stopper.


chromatic wrote:
On Thursday 17 April 2008 17:56:25 Michael G Schwern wrote:

We're working around the same issue Perl 5 is having adding new keywords. In Perl 5, since keywords and user-defined subroutines share the same
space, we can't add a new keyword without risking clashing with a
user-defined subroutine and giving it new meaning.  Thus the "use feature"
shame.  By reserving all the lower case keys for official TAP keys and
leaving everything else for users, TAP is free to add new keys.

Perl 5 also solves the problems of Bob's user-defined subroutines having the same name as Chuck's user-defined subroutines. C doesn't. C++ does. PHP didn't until (I believe PHP 5.2). I'm sure you can guess which language feature this is.

You're right, it's sensible for a programming language to separate user functions and variables written by different users because programming languages require very precise meaning.


We want convergence.  If user defined keys are to have meaning for more
than just the user or group that defined them, they must converge on a
common meaning.  User key collisions encourage that.  Users and test
producer authors can spot the collision and work it out.  Lists of common
keys and meanings can be published.  TAP displayers can make use of this
and start to do things with common, user defined keys.

As the wide-spread utility of a key becomes apparent, they can be lower
cased and made official.

It's much like tagging, with most of the chaotic problems and benefits,
except that there will be a growing set of well-defined, official keys to
provide some stability.

It didn't work for SMTP headers. It didn't work for HTTP headers. Given that SMTP and HTTP are somewhat more popular and widespread than TAP, what makes you think it will possibly work for TAP?

Sorry, I'm not terribly familiar with the history of SMTP and HTTP and I don't know what you're referring to. AFAIK HTTP has a well defined set of headers and I'm not aware of their defining any mechanism for user defined headers. I don't know what the analogy is.

As for why it'll work with TAP, with a few exceptions (exit_status, or whatever we decide to call it, is currently the only one), diagnostic keys do not effect test parsing. It's not a show stopper. At worst, a displayer that has been customized to do something special with a user defined key might show some odd output. The tests still pass and fail as before.

Prefixing brings an additional problem, how do you tell a TAP displayer to do anything with all those prefixed keys? Let's say Test::Stuff has Perl.Test.Stuff-time. So you program your displayer to do something with Perl.Test.Stuff-time. Now the Test::Thing author thinks that's a neat idea and adds Perl.Test.Thing-time. So you add in Perl.Test.Thing-time to your displayer to do the same thing as Perl.Test.Stuff-time. Test::Foo picks up on it, and you have to add another special case. Test::Bar adds it in, another special case in your displayer. Another module, add another to the list.

You're either going to wind up with a big list of prefixes and keys, which is annoying work, or you're going to break down and match on /-time$/ and defeat the point of prefixing.


Human readability of the raw diagnostics is important.

I don't find these big blobs of YAML particularly readable when compared to the freeform diagnostics we have now.

The choice of YAML is a compromise between machine parsability, extensibility and human readability. Could be worse, could be XML. Fortunately the TAP displayer can make it look all rainbows and lollipops if you like, but it's important to ensure it remain eyeballable.


That said, here's a refinement: TAP keys (presumably the most common keys) don't have prefixes. Other keys do. 80% solution to readability, and a kind of pressure to TAP producers to standardize their keys.

I'm unhappy with the readability consequences, still emphasizing the wrong thing: official vs not. It's also a pressure in the wrong direction. The pressure should be convergence, not standardization. The standard can pluck keys out of the wild on it's own.

Also this still requires defining how to make a globally unique prefix that doesn't read like a UPC code.

Finally it falls afoul of the multiplicity of prefixes making TAP displayer behavior customization involve a bunch of accounting mentioned above.


With readability problems, specification complications and inhibiting
convergence, prefixing adds more problems than it solves.

In the absence of prefixing, what solves the problem of key collision between unrelated producers? Expecting users to debug these problems and convince two or more producers to present their case for convergence to the TAP working group in a timely fashion is only one thinly-veiled metaphor about banana plantations short of the canonical 20th century Latin American novel.

User key collision is not a show stopper for the user. As mentioned above, at worst a customized TAP displayer shows some confused output for that key. So it's not urgent that it be worked out.

The authors of the two colliding producers simply hash it out amongst themselves. There's no need to involve anyone else or get any sort of official blessing. Getting the key blessed is an orthogonal problem.


--
100. Claymore mines are not filled with yummy candy, and it is wrong
     to tell new soldiers that they are.
    -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
           http://skippyslist.com/list/

Reply via email to