Set length property

Dean Landolt dean at deanlandolt.com
Tue Feb 14 17:50:20 PST 2012


On Tue, Feb 14, 2012 at 8:14 PM, Rick Waldron <waldron.rick at gmail.com>wrote:

> On Feb 14, 2012, at 4:20 PM, "Tab Atkins Jr." <jackalmage at gmail.com>
> wrote:
>
> > On Tue, Feb 14, 2012 at 1:10 PM, Dean Landolt <dean at deanlandolt.com>
> wrote:
> >> On Tue, Feb 14, 2012 at 3:54 PM, Tab Atkins Jr. <jackalmage at gmail.com>
> >> wrote:
> >>> On Sun, Feb 12, 2012 at 7:08 PM, Brendan Eich <brendan at mozilla.org>
> wrote:
> >>>> See the thread containing Dean Landolt's dissent on 'length' being the
> >>>> best
> >>>> name:
> >>>>
> >>>>
> https://mail.mozilla.org/pipermail/es-discuss/2011-November/018571.html
> >>>>
> >>>> The January 19 2012 meeting notes recorded here:
> >>>>
> >>>>
> https://mail.mozilla.org/pipermail/es-discuss/2012-January/019784.html
> >>>>
> >>>> include "At next meeting MarkM will present a tiny API proposal for
> maps
> >>>> and
> >>>> sets."
> >>>
> >>> In today's practice, iterables are ducktyped by the presence of a
> >>> "length" property.
> >>
> >>
> >> IME they're ducktyped by the presence of forEach (this is far from
> perfect).
> >> Length has nothing to do with iterability. What about generators?
> >
> > I don't want to go looking anything up right now, but I have lots of
> > memories of things looking for the presence of "length" to denote an
> > array-like.
>
> Not only that, `length` is how ES's own Array methods control iteration.
>

What does that have to do with ducktyping an array? All kinds of objects
have length properties -- it'd be foolish to assume you have an array-like
with nothing more than an object w/ a length.


> > [].forEach.call({ 0: "bar", 1: "qux" }, function(val) {
> console.log(val);  });
> undefined
>
> > [].forEach.call({ 0: "bar", 1: "qux", length: 2 }, function(val) {
> console.log(val);  });
> bar
> qux
> undefined
>

Yes, length is used to denote the existence of an enumeration. The only
thing this has to do with iteration is that enumerations are iterable.

The closest thing we have to an iteration protocol in es5 is forEach and
friends -- if you have an object with forEach you know you've got some kind
of iterable.


>
> >
> >
> >>>  I don't think an "[implication of] metric
> >>> topology" matters to basically anyone who's not a huge language-design
> >>> nerd. ^_^
> >>
> >> I'm pretty sure math geeks would disagree.
> >
> > We math geeks are also thin on the ground, so the point of my
> > assertion (that the number of people who care is vanishingly small)
> > still holds.
> >
> >
> >>> Additionally, having multiple names for the "size of" property makes
> >>> it more difficult to learn, and more difficult to create generic code.
> >>
> >> That's a bold assertion. I'd argue that having two different names for
> two
> >> things that are fundamentally different is quite practical. It's
> especially
> >> useful for writing generic code ;)
> >
> > They're not fundamentally different unless you go to some lengths (pun
> > not intended) to make them so.  "length" is the size of a collection;
> > it doesn't immediately denote anything about the indexability of said
> > collection.
> >
> >
> >> But more practically we need different names -- setting length has
> certain
> >> expectations that wouldn't hold across all collections. Violating these
> >> expectations would make things ever more difficult to learn...and
> generic
> >> code even harder to write.
> >
> > This sounds pretty reasonable.  The fact that 'length' is settable on
> > Array is pretty weird in the first place imo,
>
> If you think of `length` in terms of measuring a physical thing, it's
> not weird at all.
>

The fact that it shaves off array tails is a little weird though, right?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120214/f6275d7d/attachment.html>


More information about the es-discuss mailing list