Bill Baxter wrote:
On Tue, Jan 13, 2009 at 2:05 AM, Andrei Alexandrescu
>> [snip]
Please let me know what you think!

I think having such functions is great.  I'm not so sure about
removing the others and replacing them wholesale with these.  In
Python they have had two versions of most functions, like range vs
xrange.  The former returns an array with the result, the latter
returns a lazy iterable.  In the Python 3.0 they have done away with
most of the x__ versions and made those default.  So you might say
A-ha! the array versions weren't necessary!  But the difference is
that Python cares more about simplicity than performance, so a little
loss in speed in exchange for only-one-way-to-do-it is acceptable
there.

Here it's not as much about efficiency as about orthogonality. We know how to (lazy) map, we know how to force a computation, so why not allow people to mix and match them (as opposed to providing one-liners in the standard library).

But I'm just guessing there will be some penalty for doing everything
lazily in the case where you know you want a full array.  More data is
needed on that I think.

But even assuming it's is a free lunch, I'd want a better way make an
array than putting .eager on everything.  First off, that's not even
remotely a verb (like .eval() or .exec()), nor is it a noun that
clearly expresses the type it will become (ala array() or toArray()).

I believe (without having measured... which means that I am essentially lying) that we can safely assume the lunch will be free or low cost. The copying of the underlying range should be cheap except for the shortest ranges.

Second it's just a lot of typing for something that could be a pretty
common case, still.   I'd be happier with a one letter difference,
like Python had.  But making the defaults the other way would be fine
by me,   map -> lazy map   emap -> eager map.

Yah, I'll look into it. One thing is that not that many functions will end up being lazy. For example, reduce is eager (I think it's uninteresting to have it default to laziness). So will be sorting and searching functions. In fact map and filter are the poster children of lazy evaluation in today's std.algorithm. Of course there will be other lazy functions now that the door is open, such as Haskell's "take" etc.


Andrei

Reply via email to