You're probably right in that it could be hard to cover the spec 100% with a polyfill. But then, most vendor implementations don't, so the aim might be to have a "good enough" implementation, no?!

So what is your argument here?! Not to provide polyfills at all? Not polyfil Function.bind()? Or just caution against making "100%" the threshold for implementing them?

T.

On 07/24/2012 02:49 PM, Derrell Lipman wrote:
On Tue, Jul 24, 2012 at 7:11 AM, Martin Wittemann <[email protected] <mailto:[email protected]>> wrote:


    2. We supply a buggy polyfill and another lib will fail
    Thats nothing we have planed. We should take care of implementing
    the spec 100%. If thats not possible, we don't add a polyfill
    because that can cause problems.


Polyfills are not necessarily able to implement the spec 100%. A good case in point is Function.bind() for which a pretty good polyfill is available, but there are cases that some 3rd party libraries (or the user!) may depend on the native functionality and not get it.

Here is an excerpt from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind which discusses some issues of the polyfill for bind(). In particular, the last two bullet points are relevant:

    Some of the many differences (there may well be others, as this
    list does not seriously attempt to be exhaustive) between this
    algorithm and the specified algorithm are:

      * The partial implementation relies |Array.prototype.slice|,
        |Array.prototype.concat|, |Function.prototype.call| and
        |Function.prototype.apply|, built-in methods to have their
        original values.
      * The partial implementation creates functions that do not have
        immutable "poison pill" |caller| and |arguments| properties
        that throw a |TypeError| upon get, set, or deletion. (This
        could be added if the implementation supports
        |Object.defineProperty|
        
<https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty>,
        or partially implemented [without throw-on-delete behavior] if
        the implementation supports the|__defineGetter__|
        
<https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter>
 and
        |__defineSetter__|
        
<https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineSetter>
 extensions.)
      * The partial implementation creates functions that have a
        |prototype| property. (Proper bound functions have none.)
      * The partial implementation creates bound functions whose
        |length| property does not agree with that mandated by
        ECMA-262: it creates functions with length 0, while a full
        implementation, depending on the length of the target function
        and the number of pre-specified arguments, may return a
        non-zero length.

    If you choose to use this partial implementation, *you must not
    rely on those cases where behavior deviates from ECMA-262, 5th
    edition!* With some care, however (and perhaps with additional
    modification to suit specific needs), this partial implementation
    may be a reasonable bridge to the time when |bind()| is widely
    implemented according to the specification.

Cheers,

Derrell



------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/


_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to