caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: brogoff <brogoff@speakeasy.net>
To: Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] looping recursion
Date: Wed, 28 Jul 2004 14:22:01 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.58.0407281400090.6320@shell2.speakeasy.net> (raw)
In-Reply-To: <200407282040.40600.jon@jdh30.plus.com>

On Wed, 28 Jul 2004, Jon Harrop wrote:
> On Wednesday 28 July 2004 17:38, brogoff wrote:
> > > brogoff wrote:
> > > > Sometimes lists are best. If lists are OK for 100, 1_000, or 10_000
> > > > items, why not 100_000 or 1_000_000? Map and friends shouldn't blow
> > > > stack.
>
> Creating an int list with 1,000,000 elements and applying List.map using
> ocamlopt works fine here, and took a meagre 3.6 secs.
>
> If you must use bytecode for this then just increase the stack size limit, for
> example to 8Mb:
>
> export OCAMLRUNPARAM='l=8M'
>
> Then it runs fine, in 10.7 secs here. Wow, that's quite fast... :-)

I'm going to guess that you don't have much OCaml code running at a customer
site. Yes, I'm aware that stack size can be reset. Oh joy. I guess we don't
need tail call elimination at all then?

> > Well, I'm still on the caml-list, so of course it isn't *that* bad. Also,
> > as I said, if you need a tail recursive map over built in lists, you have
> > at least two options. Unfortunately, my preference is to use Obj, which IMO
> > points to a deficiency in the core language.
>
> No! That points to a severe deficiency in your programming style. OCaml has
> been developed and used by a great many very clever people, and me. If you're
> doing things like that then you should immediately stop and think what you
> might be doing wrong.

I guess all of the authors of ExtLib, who, last time I checked, used a set_cdr
approach, are also tyros compared to you?

> Perhaps you picked the bad style up at a Seattle OCaml user group meeting?

Very classy. :-(

> What's wrong with List.rev_map, List.rev (List.rev_map ...), increasing the
> size of the VM's stack, using native code or even writing your own,
> tail-recursive map?

I'm pretty damned well aware that I can reverse a rev mapped list. Does it occur
to you that that is not efficient? Have you tried comparing the run times of
this versus set_cdr version? Where were you when the "tail recursion modulo
cons" discussion came up? Do you understand that optimization? Here's a pointer
for you

	http://caml.inria.fr/archives/200306/msg00254.html

By my measurements, even for small lists, the set_cdr version was as fast (a
little faster even) than List.map, and it had the nice property of not failing
with huge lists.

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


  parent reply	other threads:[~2004-07-28 21:22 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-27 23:43 briand
2004-07-28  0:27 ` John Prevost
2004-07-28  0:38   ` John Prevost
2004-07-28  1:17     ` skaller
2004-07-28  1:05   ` briand
2004-07-28  1:43     ` Brian Hurt
2004-07-28  2:49       ` briand
2004-07-28  3:12         ` Brian Hurt
2004-07-28  3:20         ` Brian Hurt
2004-07-28  5:54         ` brogoff
2004-07-28  7:22           ` Alex Baretta
2004-07-28 16:38             ` brogoff
2004-07-28 19:40               ` Jon Harrop
2004-07-28 20:18                 ` Brandon J. Van Every
2004-07-29  6:01                   ` Alex Baretta
2004-07-28 21:22                 ` brogoff [this message]
2004-07-29  9:13                   ` Daniel Andor
2004-07-29  9:25                     ` Keith Wansbrough
2004-07-29  9:41                       ` Nicolas Cannasse
2004-07-29  9:57                       ` Xavier Leroy
2004-07-29 10:44                         ` Daniel Andor
2004-07-29 12:56                           ` brogoff
2004-07-29 10:11                     ` skaller
2004-07-29 12:41                     ` brogoff
2004-07-29  6:28               ` Alex Baretta
2004-07-29 14:58                 ` brogoff
2004-07-29 16:12                   ` Brian Hurt
2004-07-29 17:49                     ` james woodyatt
2004-07-29 19:25                       ` Brian Hurt
2004-07-29 20:01                         ` brogoff
2004-07-30  4:42                           ` james woodyatt
2004-07-29 17:44                   ` james woodyatt
2004-07-29 23:12                     ` skaller
2004-07-29 22:42                   ` Alex Baretta
2004-07-30  2:38                     ` Corey O'Connor
     [not found]                     ` <200407300136.14042.jon@jdh30.plus.com>
2004-07-30 12:45                       ` Alex Baretta
2004-07-30 17:07                     ` brogoff
2004-07-30 18:25                       ` [Caml-list] kaplan-okasaki-tarjan deque (was "looping recursion") james woodyatt
2004-07-30 21:20                         ` brogoff
2004-07-31  5:37                           ` james woodyatt
2004-07-28  7:27       ` [Caml-list] looping recursion skaller
2004-07-28 14:36         ` Brian Hurt
2004-07-28 22:05           ` skaller
2004-07-28  0:37 ` skaller

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.0407281400090.6320@shell2.speakeasy.net \
    --to=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;
as well as URLs for NNTP newsgroup(s).