Allen Wirfs-Brock wrote:
We made a decision about Function length and default parameters in the past and I don't see a compelling reason to change that decision now.

I'm ok with that, so (IEEE754 nod): +0.

The plan of record doesn't impact the node use case that Kevin identified as they specify that 4 non-optional parameters are required and we aren't making any changes in the counting of non-optional parameters for length purposes. Passing callback functions with optional parameters in those corresponding argument positions wouldn't make sense because the call backs are always called using a fixed set of arguments. See http://www.wirfs-brock.com/allen/posts/166 for a discussion of the hazards of mixing callee optional and caller optional function signatures.

Good points.

For example, Array.prototype.slice has a legacy length of 2 but its signature would be best expressed as:

   Array.prototype.slice(start, end=this.length)

which using the ES6 function length rules would have a length of 1.

A common use of slice is to clone an array-like as a real array: [].slice.call(arguments) is calling with zero actual parameters. So one could argue that slice's signature is actually

  Array.prototype.slice(start=0, end=this.length).

But we can farble it somehow to preserve compatibility, or break if anyone really thinks we should try to roll those dice (I don't see much upside).

push has a legacy length of 1 while it signature would be best expressed as:

   Array.prototype.push (...items)

which ES6 says has a length of 0.

By far the most common use-case is to push one value, so for legacy's sake, if not clarity's sake:

  Array.prototype.push(value, ...rest)

Among other things, differences between the generated length property values of ES code functions (note this is a non-configurable, non-writable property) and required specified values make it harder to self-host implementations of built-ins using ES code. I would like to change the specified lengths of all the built-ins to match the length that would be generated if their signature was expressed using default value initializers and rest parameters. I believe that we made some adjustments to the length of a few of the built-ins in ES5 (or implementations adjusted their implementations to match the spec) so I suspect that additional changes to the length of a few built-ins for ES6 would have little impact.

I'm not sure, but see above for some minor doubts about your preferred signatures, which might dodge some compat-break risk.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to