I must agree with Lee that, IMHO, default laziness can cause unexpected
problems. I would argue that it violates the Principle of Least Surprise.

A better way would be to make laziness optional and explicit, perhaps by
adding a "z" suffix to the lazy version of each function (e.g. map -> mapz,
for -> forz, etc).  Then lazy behavior would be available whenever it was
desired, but the code would explicitly indicate when laziness was being
employed.

Alan

On Thu, Aug 13, 2015 at 11:01 AM, Lee Spector <lspec...@hampshire.edu>
wrote:

>
>
> Thanks Sebastian for the thoughtful and helpful document! I like it and
> have shared it with my group.
>
> > On Aug 13, 2015, at 1:51 PM, Sebastian Bensusan <sbe...@gmail.com>
> wrote:
> >
> >
> > I never thought of laziness! It's a good point. Retroactively I might
> add it to the Functional Style section :)
>
> You did a nice job of presenting both pros and cons for the other features
> of Clojure, and I expect there would be something similar for your entry on
> laziness.... but FWIW from my perspective the cons here are more
> significant than for any other feature (and I know that opinions will vary
> on this!).
>
> I know that no language is perfect for everyone or every purpose, but at
> least from my perspective pervasive laziness is "one of Clojure's very few
> true mistakes" (sort of like my father-in-law says that "eggplant is one of
> god's very few true mistakes").
>
> Laziness is often glorious and elegant, and the way that it's everywhere
> by default in Clojure is quite cool. But in a not-purely-functional
> environment it can cause weird problems at unexpected times and in
> unexpected places. There are several ways to get into trouble -- there was
> a nice blog post on some of them years ago, maybe by Chas Emerick? -- but I
> think most of my own come from the not-purely-functional nature of
> synchronization, awaiting the completion of tasks dispatched to agents.
> Symptoms that I get include the saturation of only one core when I expect
> to be saturating all of them, and sometimes out-of-memory errors. I think
> the former are due to delayed lazy computations taking place at unexpected
> times, and that the latter come from GC not collecting things that it would
> know it could collect if the deferred computations were completed in a
> non-lazy way.
>
> It has been hard to replicate or track down the sources of these problems,
> but they do always go away when I un-lazify everything -- coercing
> sequences to vectors, calling doall, changing every call to map to mapv,
> etc.
>
> Because these problems are so hard to diagnose and think about, I've taken
> to pre-emptively avoiding laziness whenever possible, unless I really want
> it (which is relatively rare, for me). This can be a bit awkward, and it's
> one of the very few things that I feel like I have to apologize for when I
> introduce Clojure to students.
>
>  -Lee
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to