Re: Spec question: Declaration of IceCandidate

Le mardi 19 juin 2012 à 13:49 +0200, Harald Alvestrand a écrit :
> Simple object:
> 
> foo = { x: ww, y: zz }
> InterfaceCall(foo)
> 
> InterfaceCall has to check that x and y are present.
> 
> Dedicated object:
> 
> foo = new FooObject( { x: ww, y: zz } )
> InterfaceCall(foo)
> 
> InterfaceCall has to check that foo is of type FooObject.
> 
> Do I understand you correctly in what you mean by "using a javascript 
> object"?

Indeed. Note that using a dictionary (e.g. FooDict), we can get
verification of the presence of x and y for "free" in WebIDL. (that
said, I think in our case, the main matter is actually about checking
that x and y have valid values)

> If yes, and we have versions 1 and 2, 1 has Object as parameter, 2 has 
> FooObject:
> 
> 1) version 1 is published
> 2) 10.000 programmers write code for it
> 3) version 2 is published
> 
> Is version 2 backwards compatible, or do we have to declare that 
> InterfaceCall has a parameter of type "Object or FooObject" in order not 
> to break those 10.000 programmers' code?

We could make the type to be (FooDict or FooObject); or we could do a
method overload; or we could provide an interface in FooObject that
turns it into a FooDict (if we don't need to preserve the nature of
FooObject in that context).

> That's exactly the way we broke code in one of the many changes to 
> webkitPeerConnection (now deprecatedPeerConnection), I believe; once the 
> spec has 10.000 users, I'd like to not make that type of change any more.

I agree that once we have a widely deployed level 1 API, we can't afford
to make backwards incompatible changes; but it seems to me that the
forward compatibility story in these cases is fairly simple.

Dom

Received on Tuesday, 19 June 2012 12:24:21 UTC