Language specification vs. user agent specification

In the discussion around the document title (and process issues
around that), there is at least some actual technical content.

 (1) "traditional language"

In reply to my suggestion:
>> It might be possible to create a more traditional language definition 
>> using the bulk of the material, but expressed in less operational terms. 

Ian asked:
> What do you mean by "a more traditional language definition" and why would 
> this be desireable?

I think it is traditional to define a language and its semantics
first -- what does an utterance in the language *mean* and separately
and independently (even if the same document) define conformance
requirements for processors of that language. The current document
frequently does not do that, but defines the processing requirements
and then infers the language semantics from that.

I think this is why there are persistent discussions of it as a "browser spec" 
despite the attempts to define other conformance requirements.

Defining things as language-first is more useful and easier
to read than the current editorial style, especially for end-users
and authors of HTML documents, whose priority over implementers is
a stated design goal. Further, it allows clearer evaluation of
whether the design "goes too far" in locking down implementation
behavior unnecessarily, because, even though testable, in practice
the implementation conformance requirement is unnecessary.

I took as an example (randomly selected) image.width and image.height
defined in terms an algorithm for determining them based on whether
the image was "available", and that "available" wasn't well defined,
and that I would have to guess whether an image defined with "data:"
was or wasn't available. 

Ian replied: 
> Why would you have to guess? It is in fact fully-defined: the scheme is 
> orthogonal to the issue, it only depends on whether the image, once 
> obtained, is of a supported type and is a valid image of that type.

I think the notion of "available" isn't precisely defined, and I don't
think it can be defined precisely in a way that doesn't hamper future
implementation innovation unnecessary. 

For example, if the representation of an image URI has only been partly
retrieved, such that the width and height are known, but the rest of the
image data is not known -- is the image "available"? How much of the
image needs to be "available"? 

If I know the image width and height, but not whether it is of a supported
type, is it "available"? What if I have a processor for which support
for image types are dynamically downloadable, and so whether the image
is a "supported type" depends on the state of the download mechanism
itself? 

Is an implementation which returns the correct width and height
even if the image itself is not "available" -- is it non-compliant?
What if I know with 95% certainty what the image width and height are,
but there is some asynchronous process checking the validity of that?
Are image.width and image.height allowed to change?

If I have some other way of inferring the width and height of an 
image without accessing the image itself, is the image "available"?

If, for example, I am building a summarizer which wants to know
which images are visible and which ones aren't, I might want 
JavaScript programs to have access to image.width and image.height
even if the image isn't retrieved or even retrievable.

I think defining image.width and image.height in terms of processing
requirements is unnecessary, introduces conformance requirements
that MUST be followed that at first look may seem to be precise
but in fact are not, and don't actually help end-users or authors.

Perhaps no browsers currently implement any of the extensions or
pipelined image retrieval, but authors should not be encouraged
to create JavaScript applications that depend on the fact that
image.width is known to infer that the image is "available" for
any other purpose, which is implied by the current spec.

Even if it were possible to nail down exactly what "available" 
is or isn't, doing so is a bad idea, unnecessary, and the basis
for what I was saying was "short-sighted": trading short-term
consistency against long-term extensibility. 

Larry
--
http://larry.masinter.net

Received on Sunday, 24 May 2009 20:26:53 UTC