From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: brogoff <brogoff@speakeasy.net>
Cc: caml-list@inria.fr
Subject: Re: Tail calls (Was Re: [Caml-list] Does Caml have slow arithmetics ?)
Date: Mon, 12 Jul 2004 19:07:38 +0200 [thread overview]
Message-ID: <20040712170738.GA3699@yquem.inria.fr> (raw)
In-Reply-To: <Pine.LNX.4.58.0407080939450.22261@shell1.speakeasy.net>
> Many ocaml programs depend on tail-call elimination, although I don't
> believe anything in the docs requires it to be done.
Just for the record, here is the exact situation regarding tail-call
elimination in OCaml. It is performed in any of the following
situations:
1- Compilation to bytecode (with ocamlc).
2- When the function being tail-called is the current function
(tail recursion).
3- When the function being tail-called has no more than N arguments,
keeping in mind that a function with free variables has one extra
hidden argument representing its environment.
Here, N is a constant that depend on the target processor: it's 6 for
the Intel x86, and 10 or more for the other supported processors.
This constant is the number of processor registers used for parameter
passing. The tail-call issue appears when extra parameters need to be
passed on stack.
In other words, the only case where tail-call elimination isn't
performed is: native-code compilation, more than N arguments, and the
function being tail-called is not the current function.
Before case 2 (tail call to self) was implemented, we often received
problem reports from x86 users. Since the addition of case 2, we
haven't received any. This makes me suspect that the lack of
tail-call elimination in the situation described above isn't that much
of a problem in practice.
Proper elimination of tail calls in ocamlopt in all cases is feasible
but requires a bit of work. In particular, the current code
generation convention "caller deallocates stack-allocated arguments"
must be changed to "callee deallocates stack-allocated arguments".
Also, some stack manipulations are needed that would make tail-calls
slightly more expensive (in time) than regular calls.
- Xavier Leroy
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-07-12 17:07 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-07 6:45 [Caml-list] Does Caml have slow arithmetics ? Diego Olivier Fernandez Pons
2004-07-07 8:14 ` Richard Jones
2004-07-07 9:13 ` Basile Starynkevitch [local]
2004-07-07 12:32 ` Diego Olivier Fernandez Pons
2004-07-07 13:00 ` Basile Starynkevitch [local]
2004-07-07 15:09 ` Olivier Pérès
2004-07-07 17:06 ` David Brown
2004-07-07 17:43 ` Olivier Pérès
2004-07-08 3:40 ` David Brown
2004-07-08 11:06 ` Olivier Pérès
2004-07-07 13:06 ` Richard Jones
2004-07-07 13:22 ` David Haguenauer
2004-07-07 15:48 ` Brian Hurt
2004-07-07 13:57 ` Evgeny Chukreev
2004-07-07 14:58 ` Xavier Leroy
2004-07-07 15:48 ` Evgeny Chukreev
2004-07-07 19:16 ` skaller
2004-07-08 3:44 ` David Brown
2004-07-08 5:50 ` skaller
2004-07-08 9:51 ` Andreas Rossberg
2004-07-08 12:03 ` Marcin 'Qrczak' Kowalczyk
2004-07-08 14:04 ` David Brown
2004-07-08 14:36 ` Luc Maranget
2004-07-08 15:11 ` Alex Baretta
2004-07-08 15:49 ` Luc Maranget
2004-07-09 14:06 ` Alex Baretta
2004-07-09 16:20 ` Markus Mottl
[not found] ` <Luc.Maranget@inria.fr>
2004-07-09 17:54 ` Norman Ramsey
2004-07-12 8:08 ` Luc Maranget
2004-07-08 15:51 ` Markus Mottl
2004-07-08 18:27 ` skaller
2004-07-08 21:14 ` [Caml-list] tail recursion and register poor Intel architecture Brandon J. Van Every
2004-07-08 21:35 ` Brian Hurt
2004-07-08 23:01 ` Brandon J. Van Every
2004-07-09 4:36 ` Brian Hurt
2004-07-09 6:53 ` Florian Hars
2004-07-09 14:44 ` Brandon J. Van Every
2004-07-09 6:55 ` skaller
2004-07-09 14:45 ` Brandon J. Van Every
2004-07-09 16:09 ` skaller
2004-07-10 9:19 ` [Caml-list] embedded OCaml Brandon J. Van Every
2004-07-11 23:11 ` Alex Baretta
2004-07-12 7:39 ` Brandon J. Van Every
2004-07-12 14:04 ` Alex Baretta
2004-07-12 18:48 ` Brandon J. Van Every
2004-07-12 23:22 ` Richard Jones
2004-07-13 6:39 ` Alex Baretta
2004-07-13 8:47 ` Brandon J. Van Every
2004-07-13 8:58 ` Benjamin Geer
2004-07-13 9:47 ` Brandon J. Van Every
2004-07-13 9:18 ` Damien Doligez
2004-07-13 9:56 ` [Caml-list] OCaml as business model Brandon J. Van Every
2004-07-13 9:59 ` Richard Jones
2004-07-13 10:50 ` Brandon J. Van Every
2004-07-13 11:20 ` Damien Doligez
2004-07-13 12:01 ` Brandon J. Van Every
2004-07-14 8:05 ` [Caml-list] embedded OCaml I R T
2004-07-12 10:25 ` Christophe TROESTLER
2004-07-13 7:06 ` Alex Baretta
2004-07-08 17:12 ` Tail calls (Was Re: [Caml-list] Does Caml have slow arithmetics ?) brogoff
2004-07-08 17:23 ` Richard Jones
2004-07-12 17:07 ` Xavier Leroy [this message]
2004-07-12 21:13 ` skaller
2004-07-13 7:20 ` Xavier Leroy
2004-07-08 15:00 ` [Caml-list] Does Caml have slow arithmetics ? Brian Hurt
2004-07-08 13:30 ` Alex Baretta
2004-07-07 21:26 ` Jon Harrop
2004-07-08 5:05 ` Jacques GARRIGUE
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040712170738.GA3699@yquem.inria.fr \
--to=xavier.leroy@inria.fr \
--cc=brogoff@speakeasy.net \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox