caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: brogoff@speakeasy.net
To: Andrew Kennedy <akenn@microsoft.com>
Cc: Brian Hurt <brian.hurt@qlogic.com>,
	Ocaml Mailing List <caml-list@inria.fr>
Subject: RE: [Caml-list] @, List.append, and tail recursion
Date: Wed, 29 Jan 2003 17:44:21 -0800 (PST)	[thread overview]
Message-ID: <Pine.LNX.4.44.0301291736260.13213-100000@grace.speakeasy.net> (raw)
In-Reply-To: <92FC642DD24AC94AA356906BD9FCD2D8D8422F@tvp-msg-03.europe.corp.microsoft.com>

Thanks for the reference. I get nailed by this a couple of times a 
year, and I usually just blame myself for being sloppy and recode 
all of my maps, appends, and filters to remove it. I think it would 
be great if those three functions (at least) could be tail recursive, 
either by having the compiler do it or by providing these "hole 
abstractions" in the language. 

I wonder, like the other Brian, if there are existing ML compilers which 
implement this optimization, and if there is any chance we'll see this in 
OCaml?

On Fri, 24 Jan 2003, Andrew Kennedy wrote:
> Brian,
> 
> The optimization you describe is sometimes known as
> "tail modulo cons", and is an example of "destination-passing
> style". In other words, the place to put the result (in
> this case, the address of the tail of a just-constructed 
> cons cell) is passed on in a tail-recursive call.
> 
> See "A Functional Representation of Data Structures with a Hole"
> by Minamide in POPL'98.
> 
> http://www.score.is.tsukuba.ac.jp/~minamide/index.html
> 
> Although Minimide formalizes the problem in the context of
> a typed intermediate language, it's probably quite easy to 
> spot special cases quite far down the compiler pipeline.
> - Andrew.
> 
> > -----Original Message-----
[...snip...]

-------------------
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


  reply	other threads:[~2003-01-30  1:44 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-24 15:35 Andrew Kennedy
2003-01-30  1:44 ` brogoff [this message]
2003-01-30  9:57   ` Christophe Raffalli
2003-01-30 16:03     ` Brian Hurt
2003-01-31 10:33     ` Mattias Waldau
  -- strict thread matches above, loose matches on Subject: below --
2003-01-31 22:27 Harrison, John R
2003-01-31 19:58 Harrison, John R
2003-01-31 21:04 ` Brian Hurt
2003-01-31 17:32 Diego Olivier Fernandez Pons
2003-01-24  0:48 Brian Hurt
2003-01-30 18:10 ` Olivier Andrieu
2003-01-30 19:46   ` Brian Hurt
2003-01-30 20:52     ` Olivier Andrieu
2003-01-30 21:57       ` Brian Hurt
2003-01-31  2:16         ` james woodyatt
2003-01-31 17:05           ` Diego Olivier Fernandez Pons
2003-01-31 19:52             ` Brian Hurt
2003-01-31 21:34             ` Issac Trotts
2003-01-31 17:13           ` Brian Hurt
2003-01-31 17:42             ` brogoff
2003-01-31 19:18             ` Russ Ross
2003-01-31 19:32               ` Alexander V. Voinov
2003-02-01  2:30               ` brogoff
2003-01-31 23:12             ` Issac Trotts

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.44.0301291736260.13213-100000@grace.speakeasy.net \
    --to=brogoff@speakeasy.net \
    --cc=akenn@microsoft.com \
    --cc=brian.hurt@qlogic.com \
    --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;
as well as URLs for NNTP newsgroup(s).