From: brogoff <brogoff@speakeasy.net>
To: Luc Maranget <Luc.Maranget@inria.fr>
Cc: caml-list <caml-list@inria.fr>
Subject: Tail calls (Was Re: [Caml-list] Does Caml have slow arithmetics ?)
Date: Thu, 8 Jul 2004 10:12:33 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.58.0407080939450.22261@shell1.speakeasy.net> (raw)
In-Reply-To: <20040708163653.A1260@beaune.inria.fr>
On Thu, 8 Jul 2004, Luc Maranget wrote:
> > On Thu, Jul 08, 2004 at 11:51:10AM +0200, Andreas Rossberg wrote:
> >
> > Many ocaml programs depend on tail-call elimination, although I don't
> > believe anything in the docs requires it to be done.
> >
>
> Well, when programming in caml, I use the following rules (which I hope to be
> accurate!)
>
> + ocamlc does perform tail call elimation
> + ocamlopt does it less often. Namely, calls in tail position
> become real tail calls when all their arguments are passed in registers.
> (This does not apply to self-tail calls which are always optimized)
In my own code the self tail call is by far more
let rec loop params accum =
if finished params accum then
result params accum
else
loop (update_params params) (update_accum params accum)
is by far more the most common, so much so that that idiom is "under finger".
Usually params takes up one or two arguments. Anyone have good examples
where this limitation leads to significantly "uglier" code?
The limitation you describe should be well doumented, but is not yet annoying
to me. I'll need to write some tests and check the assembly output on the
Linux machines I have access to.
More annoying is the lack of some way to get the "tail recursion modulo cons"
capability directly in the language without needing to use Obj functionality.
-- Brian
-------------------
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-08 17:12 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 ` brogoff [this message]
2004-07-08 17:23 ` Tail calls (Was Re: [Caml-list] Does Caml have slow arithmetics ?) Richard Jones
2004-07-12 17:07 ` Xavier Leroy
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=Pine.LNX.4.58.0407080939450.22261@shell1.speakeasy.net \
--to=brogoff@speakeasy.net \
--cc=Luc.Maranget@inria.fr \
--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