Ranges

Zach Lym zachlym at indolering.com
Thu Nov 3 22:10:29 UTC 2016


With regard to syntax, Rust's is the best that I've seen: '0 ... 10'
inclusive and  '1 .. 9' exclusive.

> for ( i of [1..10] )  { ... }

Why do we need to clutter the syntax with brackets?

Strings are something that's needed, I've been tinkering with a LINQ syntax
for IndexedDB and a Range type would make it easier to take advantage of
indexing.

However, there is not right answer here: is "10A" > "001B"?  What if I'm
storing DNS labels, where `mail.example.com` < `*.example.com`?

I think there should be a sane default (perhaps with syntactic sugar to
specify region encoding and Unicode normalization) but just people to
create extend a Range object so they can build their own semantics.

Thank you,
-Zach Lym

On Thu, Nov 3, 2016 at 2:26 PM, kdex <kdex at kdex.de> wrote:

> I don't think we should give the Latin alphabet special treatment. This is
> solely about Unicode codepoints.
>
> I'd expect…
>
>         - `String.range("AAA", "ZZZ")` to generate ["AAA", "AAB", …,
> "ABA", … "ZZZ"].
>         - `String.range("", "zzz")` to either throw or be equivalent to
> `String.range("\u0000", "zzz")`.
>         - `String.range("z", "A")` to either throw or wrap around at
> "\u{ffffff}" and therefore include
>                 all codepoints.
>         - `String.range("A", "z")` to include symbols, too. If you only
> need letters in latin-1, you should
>                 either write a custom latin-1 generator or skip these
> values with a RegExp when iterating
>                 over them. Or just use two ranges, one for A-Z and one for
> a-z.
>         - `String.range("A", "π")` to include all characters from "\u0065"
> (A) to "\u03c0" (π).
>         - `String.range("😀", "😂")` to generate ["😀", "😬", "😁", "😂"]
> (surrogate pairs being respected)
>
> For more complicated cases, it might make more sense to make users pass a
> function to `String.range`
> for fine-grained control, or maybe just make users create their own
> generators.
>
> On Thursday, November 3, 2016 8:54:16 PM CET you wrote:
> > Could we just *not* have a `String.range`?
> >
> > 1. Needing a list of alphabetically sorted characters is a bit niche,
> even
> > in the Latin alphabet.
> > 2. It's ambiguous whether it should include symbols or not. (think:
> > `String.range("A", "z")`)
> > 3. If it's Unicode-aware, how should it act with, say, `String.range("A",
> > "π")`?
> >
> > On Thu, Nov 3, 2016, 16:21 Viktor Kronvall <viktor.kronvall at gmail.com>
> > wrote:
> >
> > > Even more interestingly what would `String.range("","zzz")` produce.
> From
> > > what code point is the range started? Will this throw? Is the empty
> string
> > > included in the iterator?
> > > 2016年11月3日(木) 21:18 Viktor Kronvall <viktor.kronvall at gmail.com>:
> > >
> > > Actually, after giving it some more thought for that case there is just
> > > that one possibility that makes sense.
> > >
> > > However, there are more ambiguous cases such as `String.range("AAA",
> > > "ZZZ")` (should all letters increase at once or should the rightmost
> letter
> > > be incremented first)
> > >
> > > Also, how would range handle the arguments in inverted order? Should
> there
> > > be a decreasing range or should it terminate with no elements in the
> > > iterator?
> > > 2016年11月3日(木) 21:05 kdex <kdex at kdex.de>:
> > >
> > > About the code points: `String.range` should also handle surrogate
> pairs,
> > > similar to for..of does it.
> > > About `String.range("A", "zzz")`: Do any other possibilities even make
> > > sense?
> > >
> > > On Thursday, November 3, 2016 6:47:04 PM CET Viktor Kronvall wrote:
> > > > For `String.range` what would the expected result of
> > > > `String.range('A','zzz')` be?
> > > >
> > > > Is an exhaustive pattern expected?
> > > >
> > > > `['A','B','C',...'Z','a','b','c',...,'z','AA','AB',...]`
> > > > 2016年11月3日(木) 19:21 Michael J. Ryan <tracker1 at gmail.com>:
> > > >
> > > > > If there's a Number.range, if suggest a corresponding String.range
> for
> > > > > character ranges...  Agreed on it being a utility function over me
> > > syntax.
> > > > >
> > > > > On Nov 3, 2016 10:25 AM, "Isiah Meadows" <isiahmeadows at gmail.com>
> > > wrote:
> > > > >
> > > > > If string ranges are based on character codes, it will (for the
> Latin
> > > > > alphabet, at least, not necessarily for other languages).
> > > > >
> > > > > I would prefer a function over syntax, though, since it would be
> more
> > > > > easily adopted (polyfill > syntax), and it would fit more
> idiomatically
> > > > > with the rest of the language (which also uses functions for most
> > > > > utilities).
> > > > >
> > > > > Maybe a `Number.range` would work?
> > > > >
> > > > > ```js
> > > > > Number.range = function *range(start, end=undefined, step=1) {
> > > > >   if (end === undefined) [start, end] = [0, start];
> > > > >   if (end === undefined) end = Infinity;
> > > > >   for (let i = 0; i < end; i += step) {
> > > > >     yield i;
> > > > >   }
> > > > > };
> > > > > ```
> > > > >
> > > > > On Thu, Nov 3, 2016, 12:56 kdex <kdex at kdex.de> wrote:
> > > > >
> > > > > Agreed. There's no reason why `Array.range` or `[1..10]` couldn't
> just
> > > > > return a generator
> > > > > or at least something that extends a generator, though. I wonder if
> > > it's
> > > > > viable to implement
> > > > > something akin to `.length` on ranges, which could be natural
> numbers
> > > or
> > > > > `Infinity`.
> > > > >
> > > > > As for numbers, I don't see any issues. One issue that came up in
> the
> > > > > original thread was
> > > > > that string ranges may need a better definition, as ["A".."C"]
> might
> > > not
> > > > > necessarily transpile
> > > > > to be a generator that yields "A", "B" and "C".
> > > > >
> > > > > On Thursday, November 3, 2016 4:46:03 PM CET Isiah Meadows wrote:
> > > > > > I'll note, just for clarity, that Scala's `1 to 10` is
> technically
> > > just a
> > > > > > normal method call equivalent to `(1).to(10)`, with optional
> > > parentheses
> > > > > > removed.
> > > > > >
> > > > > > Also, I'd prefer this to be a generator instead, so infinite
> ranges
> > > are
> > > > > > also possible, and so it doesn't have to be eager.
> > > > > >
> > > > > > On Thu, Nov 3, 2016, 11:52 Hikaru Nakashima <
> > > oao.hikaru.oao at gmail.com>
> > > > > > wrote:
> > > > > >
> > > > > > > How about this
> > > > > > >
> > > > > > > ```
> > > > > > > for ( i of Array.range(1, 10) ) { ... }
> > > > > > > // OR
> > > > > > > for ( i of [1..10] )  { ... }
> > > > > > > ```
> > > > > > >
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > es-discuss mailing list
> > > > > > > es-discuss at mozilla.org
> > > > > > > https://mail.mozilla.org/listinfo/es-discuss
> > > > > > >
> > > > > >
> > > > > _______________________________________________
> > > > > es-discuss mailing list
> > > > > es-discuss at mozilla.org
> > > > > https://mail.mozilla.org/listinfo/es-discuss
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > es-discuss mailing list
> > > > > es-discuss at mozilla.org
> > > > > https://mail.mozilla.org/listinfo/es-discuss
> > > > >
> > > > > _______________________________________________
> > > > > es-discuss mailing list
> > > > > es-discuss at mozilla.org
> > > > > https://mail.mozilla.org/listinfo/es-discuss
> > > > >
> > >
> > > _______________________________________________
> > > es-discuss mailing list
> > > es-discuss at mozilla.org
> > > https://mail.mozilla.org/listinfo/es-discuss
> > >
> > > _______________________________________________
> > > es-discuss mailing list
> > > es-discuss at mozilla.org
> > > https://mail.mozilla.org/listinfo/es-discuss
> > >
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20161103/001e6c78/attachment-0001.html>


More information about the es-discuss mailing list