caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jon Harrop <jon@ffconsultancy.com>
To: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] stl?
Date: Wed, 4 Mar 2009 01:29:23 +0000	[thread overview]
Message-ID: <200903040129.23236.jon@ffconsultancy.com> (raw)
In-Reply-To: <87vdqqyugc.fsf@aryx.cs.uiuc.edu>

On Wednesday 04 March 2009 00:58:59 Yoann Padioleau wrote:
> Jon Harrop <jon@ffconsultancy.com> writes:
> > On Tuesday 03 March 2009 22:31:55 Yoann Padioleau wrote:
> >> I don't know what are the Stepanov requirements, but C++
> >> can do unboxed collections like  list<int>, which OCaml can
> >> not provide I think. a 'int list' has boxed integers in OCaml.
> >
> > The currently OCaml implementation never boxes ints and the boxing of
> > other types (like float) is an artefact of the current implementation not
> > found in other language implementations like F# and my HLVM. Moreover,
> > this is not even a visible difference.
>
> Oh, Ok. Is it true for other types such as list of records,
> list of variants, list of pairs, etc ?

In the current OCaml implementation, yes, but not in F# and my HLVM where all 
such types are stored unboxed. That not only removes indirections but it also 
drastically reduces the number of allocated blocks that the GC has to work 
with and, therefore, places a lot less stress on the GC.

> > OCaml can do that too. Just wrap your code in a functor and parameterize
> > it
>
> The interesting word in your sentence is "just". The big problem with
> functors is that it's never a "just". Functors are too intrusive. If
> you have somewhere a function that needs to use this 'find', then you
> will be forced to functorize the whole caller chain, including other
> modules. That's really really really intrusive. It's exactly why
> monads in haskell are mostly a bad idea. They are too intrusive.

Yes. People often call that "creep" and I agree that it can be a PITA during 
development when you do not have a clear idea of what should and should not 
go into the functor.

> Imagine if the 'list' type would be in a functor and instead of
> 'a list you would have a List: functor(T). Each time you have
> a function using a list you would need to put it inside a functor...
> In fact this happens for OCaml data-types such as Set or Map which
> is why most people have defined their own defunctorized Set or Map
> that just use Pervasive.(=).

That is a really bad workaround for a flaw in the language which, again, is 
fixed in both F# and HLVM through the introduction of per-type functions for 
printing, equality, comparison, serialization and so on.

> That does not mean Functors or monads are completely a bad idea, they
> have their use (I used them sometimes), but they have lots
> of drawbacks.

Trade-offs. Type inference is the flip side of that coin. Overloading 
like "find" in C++ destroys type inference and that makes for really horrific 
code. You see that a lot when using F# with the .NET libraries.

OCaml is a thing of beauty here. Polymorphic variants make it even nicer and, 
of course, that is another feature than Haskell does not have...

> > The STL is extremely slow. If you want fast code in C++ then you drop to
> > the C subset. Alex Stepanov tried and failed to implement efficient
> > constructs in the STL. Furthermore, the memory consumption of his library
> > is awful. OCaml's GC is far more efficient with memory whilst permitting
> > easy sharing.
>
> I agree. Java is also better than C++ in that respect because
> it also leverages sharing.

Yes.

-- 
Dr Jon Harrop, Flying Frog Consultancy Ltd.
http://www.ffconsultancy.com/?e


  parent reply	other threads:[~2009-03-04  1:24 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-03 21:40 stl? Raoul Duke
2009-03-03 22:31 ` [Caml-list] stl? Yoann Padioleau
2009-03-03 22:42   ` Till Varoquaux
2009-03-03 23:36   ` Jon Harrop
2009-03-04  0:13     ` Peng Zang
2009-03-04  0:58     ` Yoann Padioleau
2009-03-04  1:10       ` Raoul Duke
2009-03-04  1:19         ` Pal-Kristian Engstad
2009-03-04  1:21         ` Yoann Padioleau
2009-03-04  1:29       ` Jon Harrop [this message]
2009-03-04 14:26     ` Kuba Ober
2009-03-04 14:24   ` Kuba Ober
2009-03-03 23:42 ` Jon Harrop
2009-03-04  0:11   ` Brian Hurt
2009-03-04  1:05     ` Yoann Padioleau
2009-03-04  4:56       ` Brian Hurt
2009-03-04 20:11         ` Yoann Padioleau
2009-03-04 21:59           ` Brian Hurt
2009-03-04 22:42             ` Yoann Padioleau
2009-03-04 23:19               ` Jon Harrop
2009-03-04 23:03             ` Jon Harrop
2009-03-11  3:16               ` Brian Hurt
2009-03-11  5:57                 ` David Rajchenbach-Teller
2009-03-11  6:11                   ` David Rajchenbach-Teller
2009-03-04  1:59     ` Jon Harrop
2009-03-04  6:11       ` Brian Hurt
2009-03-04 14:08         ` Christophe TROESTLER
2009-03-04 14:19         ` Peng Zang
2009-03-04 16:14           ` Brian Hurt
2009-03-04 16:35             ` Andreas Rossberg
2009-03-04 16:40             ` Peng Zang
2009-03-04 21:43             ` Nicolas Pouillard
2009-03-05 11:24             ` Wolfgang Lux
2009-03-04 19:45         ` Jon Harrop
2009-03-04 21:23           ` Brian Hurt
2009-03-04 23:17             ` Jon Harrop
2009-03-05  2:26             ` stl? Stefan Monnier
2009-03-04  3:10     ` [Caml-list] stl? Martin Jambon
2009-03-04  6:18       ` Brian Hurt
2009-03-04 16:35 ` Mikkel Fahnøe Jørgensen
2009-03-04 16:48   ` Yoann Padioleau
2009-03-04 20:07     ` Jon Harrop
2009-03-04 20:31       ` Richard Jones
2009-03-04 20:49       ` Yoann Padioleau
2009-03-04 21:20         ` Andreas Rossberg
2009-03-04 21:51         ` Pal-Kristian Engstad
2009-03-04 22:50           ` Jon Harrop
2009-03-04 23:18             ` Pal-Kristian Engstad
2009-03-05  1:31               ` Jon Harrop
2009-03-05  2:15                 ` Pal-Kristian Engstad
2009-03-05  3:26                   ` Jon Harrop
2009-03-05  6:22                     ` yoann padioleau
2009-03-05  7:02                       ` Raoul Duke
2009-03-05  8:07                         ` Erick Tryzelaar
2009-03-05  9:06                       ` Richard Jones
2009-03-05  9:34                         ` malc
2009-03-05  9:56                           ` Richard Jones
2009-03-05 10:49                             ` malc
2009-03-05 11:16                               ` Richard Jones
2009-03-05 12:39                                 ` malc
2009-03-05 19:39                       ` Jon Harrop
2009-03-05 21:10                       ` Pal-Kristian Engstad
2009-03-05 22:41                         ` Richard Jones
2009-03-05 22:53                         ` malc
2009-03-05  8:59                   ` Richard Jones
2009-03-05 17:50                     ` Raoul Duke
2009-03-05  8:17             ` Kuba Ober
2009-03-05  1:06         ` Jon Harrop
2009-03-05  9:09           ` Richard Jones
2009-03-05 20:44             ` Jon Harrop
2009-03-05 20:50               ` Jake Donham
2009-03-05 21:28                 ` [Caml-list] OCaml's intermediate representations Jon Harrop

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=200903040129.23236.jon@ffconsultancy.com \
    --to=jon@ffconsultancy.com \
    --cc=caml-list@yquem.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).