Re: dictionary questions

Sorry for the delay in replying here.

On 19/07/11 9:18 AM, David Flanagan wrote:
> I've got a few questions about dictionaries:
>
> 1) §3.4 says that dictionary members are ordered, and that the order is
> the order in which the members appear in the IDL. It is not clear to me
> whether this is intended to apply to inherited dictionary members as
> well. I don't think IDL allows forward references, so inherited members
> obviously come before non-inherited members, but that seems like a
> tenuous connection. I assume that inherited members come first, but it
> seems to me that this ought to be explicitly stated.

I removed the restrictions on forward referencing at some point.

You are right though that I should point out that inherited members come 
before non-inherited ones.

I clarified this:

http://dev.w3.org/cvsweb/2006/webapi/WebIDL/Overview.html.diff?r1=1.357;r2=1.358;f=h

> 2) On the other hand, why do dictionary members need an ordering at all?
> §3.4 forbids duplicate member names, and doesn't allow dictionaries to
> shadow or redefine the members they inherit. So I can't see anywhere
> that the ordering matters. It would simplify the algorithms in §4.2.17
> to remove the ordering altogether.

I require an ordering just because the algorithm in §4.2.17 fetches all 
the values of properties on an ES object used as a dictionary. :)  This 
is the same as sequence values.

Allen also takes issue with the mandatory copy and type conversion of 
all the values dictionary/sequence.  I did it this way to ensure that 
there would be no ambiguity in the order that property values are 
fetched and side effects run.  The alternative is to not require this 
(make the type conversions "lazy") and rely on specification writers to 
be clear about the order and exactly when dictionary members are looked 
up.  I am a bit worried that spec writers won't do this.  I can of 
course include some wording in the spec warning authors of this.

I'd like to know if others have an opinion on this.

> 3) In §4.2.17, in the algorithm for converting an IDL dictionary to an
> ES Object, shouldn't the Dictionary's default values be used for members
> that are not present? And if not, what is the point of the default values?

The point of the default values is for converting the other way, when 
passing in an ES object with some missing properties.

At the IDL level, dictionary members can be present or not present, 
regardless of whether they have a default value.  I think it makes sense 
then to model that in the converted-to ES Object by omitting properties 
for the values that are not present but have a default value.

Either that, or we change IDL dictionary values so that there is no 
concept of a dictionary member that has a default value but is not 
present.  I don't think I mind either way.  Do you think one makes more 
sense than the other?

Received on Friday, 26 August 2011 03:36:40 UTC