>From SICP: "With a tail-recursive implementation, iteration can be
expressed using the ordinary procedure call mechanism". As I
understand this, a tail call is a loop with functional notation but
not actually a function call. That's why I find this issue difficult
to follow, since loops are internal details of a function/method and
don't get involved with calls, stack frames, access security, or how
the jit-compiled code may or may not be optimized. So there's
something key here that I'm missing.
In a little project of mine I plan on doing this (hand-coded with ASM
as my compiler doesn't do TCO yet). That seems to work but I wonder
what issues may come up.
int fact(int n, int r) {
if (n == 0) return r;
else return fact(n-1, n*r);
}
0: iload_0
1: ifne 6
4: iload_1
5: ireturn
6: iload_0
7: istore_2 // temp for n
8: iload_2
9: iconst_1
10: isub
11: istore_0
12: iload_2
13: iload_1
14: imul
15: istore_1
16: goto 0
On Jan 26, 11:20 am, Luc Prefontaine <[email protected]>
wrote:
> From what I recall from a previous thread it would require so much byte code
> tweaking that
> Hot Spot optimizations would become useless.
>
> You can search the mailing list, you will find a couple of instructive
> discussions
> about this.
>
> Luc P.
>
> On Wed, 26 Jan 2011 10:01:04 -0800
>
> Raoul Duke <[email protected]> wrote:
> > On Wed, Jan 26, 2011 at 7:41 AM, Michael Gardner
> > <[email protected]> wrote:
> > > However, the JVM does not support tail-call optimization.
> > > Apparently Clojure can't support implicit TCO without support from
> > > the JVM
>
> > always wondered about that also wrt scala etc., am under the
> > impression that it is implementable, but it would be too slow?
>
> --
> Luc P.
>
> ================
> The rabid Muppet
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en