- From: timeless <timeless@gmail.com>
- Date: Mon, 11 Jul 2011 19:53:34 -0400
- To: public-script-coord@w3.org
> 3.3.4.4. Named properties
The section is called "Named properties", but many of the actual
things uses "name
<foo>" instead of "named <foo>".
I personally think of "foo[bar]" as a "named getter", because it's a
getter that gets
things for a named property, it does not "get the name of a thing".
If an interface supports named properties, then the interface
definition MUST be
accompanied by a description of what the ordered set of names the object can be
indexed with at any given time is.
s/what//; s/the object can be indexed with/that can index the object/; s/time
is/time/;
> Name getters and deleters MUST be declared to take a single DOMString argument.
s/Name/Named/ ?
> Index setters and creators MUST be declared to take two arguments, where the first
is an DOMString.
s/an DOMString/a DOMString/
---
I can't tell from the prose that only <name creator> and not <name setter> is
executed when doing a first assignment to foo[bar] for a "bar" not_in foo.
---
> A static operation is one that is not called on a particular instance of the
interface on which it is declared, and is instead associated with the interface
itself.
In Java, it's possible to do: ObjectInstance.staticFunction(args), which is
equivalent to Class.staticFunction(args). The prose above did not help
another reader
determine whether this was allowed here. In JavaScript, statics are
only available
from the Class and not the ObjectInstance.
---
> A dictionary can be defined to inherit from another dictionary.
> If the identifier of the dictionary is followed by a colon and a scoped name,
> then that scoped name identifies the inherited dictionary.
> The scoped name MUST resolve to a different dictionary.
> The inherited dictionaries of a given dictionary D is the set of
> all dictionaries that D inherits from, directly or indirectly.
There doesn't seem to be any propose here to prevent loops (there is in other
sections).
---
> [11] DictionaryMembers → ExtendedAttributeList DictionaryMember
DictionaryMembers
> | ε
> [12] DictionaryMember → Type identifier DefaultValue ";"
Is there a reason ExtendedAttributeList is in DictionaryMembers instead of in
DictionaryMember?
| [11] DictionaryMembers → DictionaryMember DictionaryMembers
| | ε
| [12] DictionaryMember → ExtendedAttributeList Type identifier
DefaultValue ";"
I guess it somewhat makes sense later for ExceptionMembers/ExceptionMember..
---
> In an ECMAScript implementation of the IDL,
> you an Object can be passed in for the optional PaintOptions dictionary:
s/you//
---
> No extended attributes are applicable to exception fields.
> [15] ExceptionMembers → ExtendedAttributeList ExceptionMember
ExceptionMembers
I think that you probably want to omit ExtendedAttributeList here, as the prose
forbids it...
---
> An exception can be defined to inherit from another exception.
> If the identifier of the exception is followed by a U+003A COLON (":")
> character and a scoped name, then that scoped name identifies the
> inherited exception. The scoped name MUST resolve to a different exception.
There doesn't seem to be any propose here to prevent loops (there is in other
sections).
> Each exception field (matching ExceptionField) is specified as a
> type (matching Type) followed by an identifier (given by an identifier
> token following the type). If the Type is a scoped name, then it MUST
> resolve to an interface or typedef.
Is there a reason 'interface' isn't linked? `resolve` is linked two paragraphs
earlier and again here.
---
> In an ECMAScript implementation, the different types of DOMExceptions
> could be distinguished in a number of different ways:
> ECMAScript
> } catch (e) {
> // By testing with "instanceof".
> if (e instanceof HierarchyRequestError) {
It would be good if you recommended that authors *never* use this method.
Some prose is probably valuable here:
"Note that using `instanceof <Exception>` can return `false` if the
exception object
comes from a different document than the global scope of the running
script even if
the exception is an instance of the an <Exception> class of the given
name in its own
document." -- Someone else can probably provide an improved block for
this, and see
thread [2] for comments about this hazard.
---
> A typedef is a definition (matching Typedef) used to declare a new name
> for a type. This new name is not exposed in language bindings;
s/in/by/
> it is purely used as a shorthand for referencing the type in the IDL.
---
> The type being given a new name is specified after the typedef keyword (matching
Type), and the identifier token following the type gives the name.
> The Type MUST NOT be a scoped name that resolves to an interface.
I think one of 'Type' or "NOT" here is wrong, I was reading:
> [16] Typedef → "typedef" Type identifier ";"
And assumed the 'NOT' was applying to 'Type', the prose probably wants:
s/Type/type/ -- to mean 'The type [being given the new name
`identifier`] MUST NOT
...', or
s/Type/identifier/.
---
> Implements statements can appear on a module or at the outermost scope.
s/on/in/
---
> 3.8. Objects implementing interfaces
> There is no way for a user object to represent an exception.
?
> Only interfaces with the following characteristics can be implemented as user
objects:
I found this list hard to parse, based on later prose, I think this should be
changed:
s/with/with all of/
Some additional prose might be warranted to remind readers that
<Dictionaries> are
also allowed....
Also note that "only...can" isn't an RFC word construct. It might be
better to say
something like "User objects SHOULD NOT be treated as an interface
unless all of the
following apply".
---
Afaict, this isn't forbidden or at least actively discouraged:
interface Foo {};
Foo implements Bar;
Foo implements Baz;
interface Bar { attribute short x; attribute short y; };
interface Baz { attribute short x; attribute short z; };
There is text in a couple of other sections which talks about things
being undefined
or needing to be clarified by prose, but there definitely isn't any near the
<implements> section.
---
> The interface and all of its inherited interface do not have any consequential
interfaces.
s/inherited interface/inherited interfaces/
> then the object will not be considered to be one that implements that interface.
s/will not/should not/
> This section lists the types supported by the IDL, the set of values each type
correspond to, and how constants of that type are represented.
s/the IDL/(Web|this|) IDL/
s/each type correspond to/corresponding to each type/
> all conversions necessary will be performed before the operation is invoked
> or the attribute updated.
s/will/should/ (RFC word)
s/updated/is updated/
> In some language bindings, type conversions could result in an exception being
thrown.
s/could/may/ ?
> In such cases, these exceptions will be propagated to the code that made the
attempt to invoke the operation or assign to the attribute.
s/will/should/ ?
There's actually text somewhere which talks about whether or not [3] this will
happen. Sometimes the exception might get swallowed. If I come across
the document
that talks about this, I'll reply with a note.
> [52] Type → AttributeType
> | "sequence" "<" Type ">" Null
I think it'd be good to have a SequenceType token.
> [60] TypeSuffixStartingWithArray → "[" "]" TypeSuffix
> | ε
I'm trying to understand the reason that TypeSuffixStartingWithArray exists in
WebIDL. It seems like its goal is to cause <AttributeType> for "any" to not be
nullable but to allow for arrays whose row and subs can be nulled.
> Note also that null is not a value of type DOMString. To allow null, a nullable
DOMString, written as DOMString? in IDL, can be used.
I know it's a note, but it feels like "must" or "should" would be
appropriate instead
of "can". You're trying to say "needs to be used"....
> Authors of specifications using Web IDL might want to obtain a sequence
> of Unicode characters given a particular sequence of 16 bit unsigned
> integer code units, however.
The "however" here feels dangling.
> There is no way to represent a sequence constant value in IDL.
> There is no way to represent an array constant value in IDL.
> There is no way to represent a Date constant value in IDL.
Should these be "constant <foo> value"?
> The instants in time that this type can represent are the same that can be
> represented with ECMAScript Date objects ([ECMA-262], section 15.9.1.1) –
> namely, every millisecond in the 200,000,000 days centered around midnight
> of 1 January, 1970 UTC, except for any millisecond that is part of an
> inserted leap seconds, which cannot be represented with this type.
s/seconds/second/
s/which cannot/because they cannot/; s/with this/by this/
> Any extended attribute encountered in an IDL fragment is matched
> against the following five grammar symbols to determine what form
> (or forms) it is in:
s/what/which/
> Although ExtendedAttributeIdent and ExtendedAttributeScopedName are
> ambiguous, no extended attribute defined in this document can take both
> of those forms.
s/can take/takes/
> It may be that [Callback] is not the best name for the extended attribute anyway,
although it does capture many uses of interfaces that user objects can
implement.
"UserObject" ?
> The [Callback] extended attribute MUST either take no argument or take an
identifier.
s/take no argument or take an identifier/take an identifier or no
argument/ -- it's
hard to parse the negation as currently written.
> Example
> The following IDL fragment defines simplified versions of
> a few DOM interfaces, one of which is annotated with the
> [Callback] extended attribute.
Please provide an example of [Callback(identifier)]. The prose is
insufficient for
this.
> Each ECMAScript global environment ([ECMA-262], section 10.2.3) MUST have
> its own unique set of each of the initial objects, created before control
> enters any ECMAScript execution context,
s/any/a related/
> but after the global object for that global environment is created. The
> [[Prototype]]s of all initial objects MUST come from
s/MUST/in a given global environment MUST/
> the same global environment.
You *might* want s/the/that/, it's a stronger restriction than the
current text --
currently a bunch of objects can all have prototypes which come from
one *other*
global environment (I've actually had code which did things like this,
but no one in
their right mind would want it -- thus my suggestion of s/the/that/).
> If the value is an object reference to a special object that represents
> an ECMAScript undefined value, then it is converted to the ECMAScript
> undefined value. Otherwise, the rules for converting the specific type
> of the IDL value are performed.
<the rules for converting the specific type of the IDL value> doesn't
seem to specify
something, is it a certain section? Is it the following list? ...
> ECMAScript functions that implement an operation whose IDL specifies a
> void return type MAY return any value, which will be discarded.
should `will` be SHOULD/MUST?
> Return the IDL boolean value is the one that represents the same truth
s/is/that is/
> value as the ECMAScript Boolean value x.
---
> Set x to x modulo 28.
Is modulo specifically meant to be an ECMAScript operation? If so, was there
something that indicidated that (if so, I missed it), if not, I think
you probably
need to specify whose modulo you're using (specifically relating to
how negative
numbers are handled).
I'll continue from 4.2.18. Nullable types — T? § tomorrow.
[2] http://lists.w3.org/Archives/Public/public-script-coord/2011JulSep/0014.html
[3] ?
Received on Monday, 11 July 2011 23:54:11 UTC