- From: Cameron McCormack <cam@mcc.id.au>
- Date: Fri, 09 Dec 2011 12:02:02 +1100
- To: Brendan Eich <brendan@mozilla.org>
- CC: Anne van Kesteren <annevk@opera.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>, Travis Leithead <travis.leithead@microsoft.com>
On 9/12/11 11:32 AM, Brendan Eich wrote: > Order is fragile under maintenance. It's brute force, you could do > it, but more usable and less brittle would be something that accounts > for type relations via inheritance, broadly construed. Didn't someone > mention C3 already? (http://en.wikipedia.org/wiki/C3_linearization) I don't quite follow. C3 is for handling multiple inheritance, isn't it? Or does the "broadly construed" above mean we should treat these within-a-single-interface overloading cases as a kind of inheritance hierarchy somehow, so that we can select between them with C3? Currently in the spec there is a single case where order of operation declaration matters: if you have overloading on two types which are defined to be distinguishable but really you could have a value that matches both, e.g. interface A { }; interface B { }; interface C { void f(A x); void f(B x); }; It used to be that it would say "well it's up to the spec using Web IDL to disambiguate this case if you pass in an object that implements both A and B" but there was a request to make it able to be disambiguated just from the IDL. What's being discussed in the other thread "overload resolution consistency" is how to ensure that if one day we have interface D { void f(DOMString x); }; which we call like d.f(123) and get the Number converted to a String, that we don't lose this when we later add an overload interface D { void f(DOMString x); void f(Node x); }; and my initial proposal there was to say "if you don't have exactly matching types for all arguments, just select the first overload and coerce the values appropriately". (And Simon brings up a good point about that making certain APIs like some of the canvas methods suck in terms of getting the type slightly wrong, passing String instead of Number for example.) If we could have an overload resolution behaviour that preserved d.f(123) selecting f(DOMString) then we can do away with [AllowAny].
Received on Friday, 9 December 2011 01:02:46 UTC