On 12.11.2010 2:40, Brendan Eich wrote:
I agree with Dave, Allen, and Oliver
That's OK.
I consider several variants also. As Allen mentioned, if it will be a
generic thing, then `foo[-n]` may break an old code (and then we need
another syntax e.g. a[* - 1] -- if need at all then!). OTOH, if only for
arrays -- I don't see any big _real practical_ issues.
that we should not just change indexing under Harmony script-type opt-in.
Note also that Python, at least, has a more elaborate system of slicing that
has evolved over the years. I added slice in the Netscape 4 era, which made it
into ES3 and has the desired negative index behavior, but other additions from
that era (some from Perl!) do not match, and anyway, the
array-index-is-a-property-name ship had sailed in 1995.
Of course it had sailed. But the thing is nobody (?) on that ship used
negative-array-index in old code -- in a some more-less serious _real
practical_ application. So it may be re-borrowed and put on the next
ship. However, not necessary in this view -- a[-1]. If generic, -- with
another syntax.
If we were to develop a generic slice proposal with new syntax, then I think it
would be crazy not to follow Python's (and ES3-5's slice method's) lead and
support negative indexing. This would not break existing code because it would
happen only with new syntax and new functions or methods.
Absolutely.
The obvious slice syntax is a[i:j] for a slice of a from index i up to but not
including index j, with negative indexes supported as from the end, and with
indexes on either side of : optional, defaulting as in Python.
If : is problematic we could try CoffeeScript's .., but .. and ... as well as .
in the language may be too much. The syntax is not as important as the
semantics at this point, but one more syntax observation:
The [:] syntax fits in Python, where a[-1] is the last element of the sequence
a.
But since we don't want to make that change to JS arrays,
So, can we stop at this point? I mean -- if we really don't want this
changes, then the question may be closed, I guess. Just acknowledge it.
this slice syntax is not so attractive. It will mislead Python folks into
using negative indexes with property accesses as well as with slices.
Yeah, true. Though, maybe nevertheless to completely port Python's
slicing for arrays? ;P I liked this idea. But -- only for arrays, not
generic then. Unfortunatelly, it may break current generic slice --
`[].slice.call({0:1, 1:2, length:2}, -1)[0]` // 2.
Ruby does not dedicate syntax, using methods instead (Smalltalk-y, as one would
hope).
How that? Coffee borrows its .. (including higher index) and ...
(excluding higher index) from Ruby:
Ruby:
a = [1, 2, 3, 4]
a[-1] # 4
a[0..2] # [1,2,3]
a[0...2] # [1,2]
(need to say, that for me .. and ... should be logically inverted: i.e.
... should include, and .. -- exclude).
This seems much more promising for Harmony than new slice or from-the-end
indexing syntax, since we already have Array and String slice methods that do
the right thing with negative indexes.
Yes, regarding slice -- yes. And moreover, they are generic.
We have String charAt/charCodeAt but part of the appeal of slicing and
negative indexing is how they work on all sequence types in Python.
An Array and String get method that takes an index, which can be negative,
would complement slice. Array would want a set or put method too. Names need
tuning, but they ought to be short.
Absolutely.
/be
On Nov 11, 2010, at 3:25 PM, David Herman wrote:
If harmony would introduce this syntax "guarded" under a new script type, there
would at least be no danger of breaking the web (existing scripts).
That sounds like an interop nightmare -- you're talking about forking the Array
type between language versions. Keep in mind that non-Harmony and Harmony code
will be able to interact in the same page.
Dave
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss