Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: skaller <skaller@users.sourceforge.net>
To: David Brown <caml-list@davidb.org>
Cc: Xavier Leroy <Xavier.Leroy@inria.fr>, caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] Does Caml have slow arithmetics ?
Date: 08 Jul 2004 15:50:17 +1000	[thread overview]
Message-ID: <1089265816.29648.205.camel@pelican.wigram> (raw)
In-Reply-To: <20040708034455.GB29942@davidb.org>

On Thu, 2004-07-08 at 13:44, David Brown wrote:
> > Of course that argument fails totally in one important
> > case -- Q: if you wanted a loop why didn't you use one?
> > A: tail-rec functional code is considered cute :)
> 
> In some functional languages (Scheme, specifically), tail recursion is
> required to be implemented iteratively.  It is a common enough idiom,
> and easy enough to implement, that it is generally done in functional
> languages.  In fact, gcc does it in C, with enough optimization.

I'm aware of this, my point is that Xavier's argument
that complex code generates inefficient code 
"what else do you expect?" is a bit weak.

Whether you expect tail-rec optimisation or not
depends on your knowledge of compiler implementation
details.

Felix for example has a functional subsystem which
one could argue is "more functional" than Ocaml's
since side effects are not permitted .. but it happens
to generate C at the moment -- and I admit I myself
have no idea whether tail calls in functions are
optimised or not, or how to actually organise the generated
C so as to encourage a compiler .. perhaps gcc, perhaps MSVC ..
to actually perform the optimisation. Procedure calls ARE
tail-rec optimised by Felix (guarranteed!) but the calling
mechanism is quite different to that used for functions.

Even experts are often surprised by generated code complexity.
In C++ for example, the close connection between source
and generated code is lost in some cases, particularly
constructor calls: the cost of instantiating a class with
virtual bases and functions derived from others can be
extremely high and is silently hidden .. and C++ experts 
often miss the disparity between source and generated code.

Note I'm not disputing Xaviers orientation here: I basically
agree, I merely wish to point out that the argument isn't
quite as strong as one might think. Higher level optimisations
are also important IMHO. Chosing which ones to actually do
is of course very hard :)

-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net



-------------------
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:[~2004-07-08  5:50 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-07  6:45 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 [this message]
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
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=1089265816.29648.205.camel@pelican.wigram \
    --to=skaller@users.sourceforge.net \
    --cc=Xavier.Leroy@inria.fr \
    --cc=caml-list@davidb.org \
    --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