James:

It's extremely difficult to overflow the stack in Racket, because the stack
isn't arbitrarily limited to some small value -- it does some tricks so
that the stack is only limited by your total available memory.

For me, having to worry about stack overflows is definitely one of the
biggest pain points in Clojure.  Clojure provides a few workarounds for the
common cases (recur, trampoline, lazy-seq), but there are some scenarios
where you really just need ample stack.

John:

When you're doing memoization and you have a lot of "holes" in the inputs,
one option is to have two phases to your function.  The first phase takes
the initial input and then computes a collection of all the inputs that are
dependencies and need to be computed ahead of time.  Then in phase two, you
can "prime the pump" with that particular sequence of inputs.  If you need
help on this, I can give you a concrete example of how to do this.

Another option to consider:
I wrote a blog entry about how to use core.async to convert a
stack-consuming computation into stackless with minimal transformation to
your program.  I haven't tried this technique yet in any serious program,
but it's worth investigating:

http://programming-puzzler.blogspot.com/2013/07/stackless-clojure-with-coreasync_7.html

-- 
-- 
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/groups/opt_out.

Reply via email to