On Wed, Oct 5, 2011 at 1:40 PM, Bob Nystrom <[email protected]> wrote:
> > > On Wed, Oct 5, 2011 at 7:18 AM, John J Barton <[email protected] > > wrote: > >> >> >> On Tue, Oct 4, 2011 at 2:33 PM, Bob Nystrom <[email protected]> wrote: >> >>> That's correct. That's often the cost of concision. By analogy: you can >>> do a lot of stuff using either an explicit stack data structure or >>> recursion. Using recursion is often more concise but then the state is >>> hidden from you in the callstack. Sometimes that's a good trade-off, >>> sometimes it's not. >> >> >> Thanks, that analogy helps confirm my opinion of generators. In my >> experience, the good trade-off is recursion on data structures and the >> not-good-trade-off is recursion for iteration. >> > > Yes, I wasn't making any claim about using recursion *for iteration*. > Maybe I need to be more concrete here: > > If you need to walk a tree, you can do so using recursion or you can use an > explicit stack data structure. The former is usually more terse (because it > implicitly relies on the callstack itself storing the stack) but the other > can be more clear. > > *By analogy*, if you need to produce a sequence of values, you can do so > using generators, or you can use an explicit iterator object. Again, the > former is usually more terse (because the language automatically creates the > iterator object for you given a function containing yield) but the latter > can be more clear (because the state is laid bare). > > Note that those two paragraphs are separate. I'm not talking about using > recursion for iteration. Is this clearer now? > > So far the only examples I've seen for generators involve iteration. > > > Yup, that's what generators do. And recursion involves stacks. > > I've heard no clamor at all. >> > > That may be true, but it may say as much about your surrounding auditory > environment as it does the feature in question. You may be right, but simply > saying "Bigfoot isn't in my living room" doesn't disprove the existence of > Bigfoot. > > There *are* languages in wide use that have this feature. None of those > languages (Lua, C#, Python) has a reputation for catering to the esoteric > programming language fanbase. > > Really this is a niche feature, an aid for the rare case where >> conventional iterators are a poor match. >> > > They said the same thing about closures. I agree that generators aren't the > most important language feature in the world, but I think if you had them > you'd find that you used them. > > Here's an example: > > let tree = [['a', 'b', 'c'], [['d', 'e'], 'f'], ['g']]; > > let inOrder = walk(tree); > for (node of walk(tree)) alert(node); // a, b, c, d, ... > > walk(tree) { > if (typeof tree == 'string') { > yield tree; // leaf > } else { > yield* walk(tree); // branch > } > } > > > What would the above look like without generators? > Woah there -- where does this syntax come from? Was `walk(tree) {...}` supposed to be `function* walk(tree) {...}` instead? Or is this intended to represent some sort of method generator? If the latter, doesn't this need some mechanism to distinguish it from a non-generator method? Has there been any discussion of a generator method syntax in the class discussions?
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

