- From: Henri Sivonen <hsivonen@iki.fi>
- Date: Thu, 17 Sep 2009 10:18:04 +0300
- To: noah_mendelsohn@us.ibm.com
- Cc: Larry Masinter <masinter@adobe.com>, "www-tag@w3.org" <www-tag@w3.org>
On Sep 15, 2009, at 04:52, noah_mendelsohn@us.ibm.com wrote:
> Henri Sivonen writes:
>
>> I'm not assuming that. What I assuming is that if the newer language
>> makes old language features non-conforming, the old language features
>> are bad right away.
>
> Why is this true in all interesting cases?
Presumably specs shouldn't make old language features non-conforming
unless the old features are bad. I can see a point that <font> has
always been bad but it couldn't be made non-conforming until CSS was
available to authors. However, I'd argue that when something is made
non-conforming because it's bad and there's a less bad replacement,
the worse thing shouldn't be made non-conforming until the replacement
has been deployed.
> Example: someone deploys a
> language for which keyword are treated as case-insensitive, so xxx,
> Xxx,
> xXx, and XXX are the same. Over time, for whatever reason, it's
> decided
> that this variability is a bad thing. So, users are warned, and
> eventually a new version of the language is introduced that
> mandates, say,
> lowercase only. Per this new version of the language, all except the
> first of the above identifiers are illegal, or if you prefer,
> undefined.
(In the case of Web languages, you almost always don't have the
liberty to update a language in a way that makes a previously defined
thing be processed as undefined.)
> Let's imagine, though, that in filesystems, databases, and/or web
> servers
> around the world there live lots of documents written to the old
> specification. Why is their use of the old feature (in this example
> the
> upperase or mixed case keywords) "bad right away"?
If variability is bad and non-variability was already allowed under
the old spec, the old documents could have been authored in a way that
is now declared the non-bad way. Why wasn't it bad back when the old
documents were authored to have the variability? Or the other way: If
variability is bad, why would it be less bad depending on when the
content was authored?
On the other hand, if that variability isn't bad enough to warrant an
error, the new spec shouldn't say variability is bad to the point of
being an error.
There are cases when old practices are very, very mildly bad so that
it's both wasteful to edit old content to remove the practices and
it's wasteful to keep using the practice for new documents. For
example, specifying the type="text/css" attribute on the HTML <style>
element is this kind of practice--specifying the attribute is just
waste of typing, network bandwidth, parsing time and maintainer's
reading attention. I think in cases like this, the waste of fixing old
but maintained stuff should outweigh fighting the prospective waste
and the practice shouldn't be proclaimed as an error, although it
would be appropriate to communicate the prospective wastefulness to
authors in other ways.
> Whether or not inband
> version identifiers are used to help sort things out, I don't think
> those
> old documents need immediately be treated as "bad". Software can
> still
> process them and indicate: you seem to have used a feature that was
> discontinued as of version N; I can continue or choke as you prefer.
In practice, Web language consumers have an incentive not to choke if
they maintain a non-choking code path anyway, so it's useless for
specs to give them an opportunity to continue or choke depending on
version identifier. Thus, consuming software using a version
identifier to sabotage itself is not a useful motivation for having
version identifiers.
(The incentive is this: UA A implements language as of version N-1 and
doesn't choke on feature F. UA B implements language versions N-1 and
N but doesn't choke on feature F if content specifies N-1 but chokes
when content specifies N. When content specifies N but uses feature F
nonetheless, UA A seems to work better from the user point of view
that UA B. Thus, UA B disadvantages itself by implementing conditional
choking.)
> FWIW, my own thinking on in-band version ids is: if the same
> content is
> ever going to mean two incompatible things per different definitions
> of
> the language, e.g. if version one says {0=false, 1=true} and version
> two
> says {1=false; 0=true}, then some sort of version indicator in the
> document is useful to disambiguate the intended interpretation.
This situation is contrived and doesn't arise in well-maintained Web
languages. If a working group tried to update a Web language in such a
gratuitously incompatible way, the community would flip the bozo bit
on the spec and the WG and ignore them, so the specified
incompatibility wouldn't have a bearing on practical matters. Thus,
gratuitously incompatible changes aren't a useful motivation for
having version identifiers.
(Besides, we could leave it to the hypothetical reckless future WG to
define a version identifier if/when they make such an incompatible
change. After all, consuming software developed now wouldn't be able
to guess what incompatibility a new version identifier means and
they'd keep on processing the content anyway due to the self-sabotage
disincentive outlined above.)
--
Henri Sivonen
hsivonen@iki.fi
http://hsivonen.iki.fi/
Received on Thursday, 17 September 2009 07:18:48 UTC