Browse thread
Estimating the size of the ocaml community
-
Yaron Minsky
-
Christopher A. Watford
-
Frédéric_Gava
-
skaller
-
Erik de Castro Lopo
- Olivier_Pérès
-
Thomas Fischbacher
-
Frédéric_Gava
-
Thomas Fischbacher
- Paul Snively
- josh
- Richard Jones
-
Jon Harrop
-
Michael Walter
-
Jon Harrop
- Damien Doligez
- Thomas Fischbacher
- Michael Walter
-
Radu Grigore
- Gerd Stolpmann
- Jon
-
Jon Harrop
- Thomas Fischbacher
- Richard Jones
-
Michael Walter
- Ville-Pertti Keinonen
- Oliver Bandel
- Basile STARYNKEVITCH
-
Thomas Fischbacher
- ronniec95@l...
- skaller
- chris.danx
-
Frédéric_Gava
-
Erik de Castro Lopo
- sejourne_kevin
- Stefano Zacchiroli
-
skaller
-
Frédéric_Gava
- Kenneth Knowles
- Michael Jeffrey Tucker
- Richard Jones
- Nicolas Cannasse
- Evan Martin
- Eric Stokes
- chris.danx
- Sylvain LE GALL
- sejourne_kevin
- Sven Luther
- Johann Spies
-
Christopher A. Watford
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2005-02-07 (06:16) |
From: | Michael Walter <michael.walter@g...> |
Subject: | Re: [Caml-list] The boon of static type checking |
On Sun, 6 Feb 2005 23:34:02 -0600 (CST), Brian Hurt <bhurt@spnz.org> wrote: > Probably a bad idea, but I've got to jump in here. > > Full disclosure: I *hate* C++. Mainly because I've actually written real > programs in it. The next time I have to use C++ in any sort of serious > way I'm registering c++sucks.com and starting a website to catalog all the > different ways C++ sucks. Feel free to stop reading at this point. :-) > ... > > g++ seems to generate better > > code than ocamlopt for similar simple problems > > (see Alioth for quantitative evidence given silly > > set of sample 'problems') > > Yep. And, conservatively, 10 times as much effort has gone into the gcc > optimizer as the Ocaml optimizer. Possibly 100 times. For, according to > Alioth, about a 10% improvement. It's only with gcc 3.x that C++ managed > to beat Ocaml on performance. More effort having gone into gcc and better performance of gcc are arguments pro gcc, right? ;-) > > IMHO the single major inefficiency in C++ is also a source > > of efficiency -- lack of a garbage collector. > > It's a source of efficiency on the small scale- it's easy to write a 1,000 > line program with hand allocation. Rather harder to write a 10,000 line > program, and a major bitch to write a 100,000 line program without garbage > collection. Personally I like it that in C++ you actually have the choice to use appropriate garbage collection schemes when you desire to do (yep, multiple kind of GCs for different subsystems/data/... is a win). Makes it easier with > 1,000,000 line programs :-) > > OTOH Ocaml has a massive inefficiency C++ does not, > > namely boxing, and ocaml tools currently do not > > seem to be very good at unboxing. > > This is also a big efficiency for Ocaml, for two reasons. First, it > encourages code reuse. Second, Ocaml only needs one implementation of a > function for all types. C++'s template system, to unbox everything, > duplicates code like crazy- generally, a new implementation for every > type. Very true. Technically this would not be very difficult in C++, though. There's a certain trade off you have to make for either way. > > Again, C++ provides inline functions which > > provide a way Ocaml does not have so easily > > for optimising. > > Don't assume that inlining is optimization. Actually, it generally isn't. > Having actually timed it on modern hardware, a function call costs like > 2-3 clock cycles these days. Plus 1-2 clock cycles per argument. This is > compared to the 10-30 clock cycles a mispredicted branch costs, the 20+ > clock cycles an L1 cache miss/L2 cache hit costs, and the 100-350+ clock > cycles of an L2 cache miss/memory fetch. Inlining for very small functions generally is an optimization. > What little inlining is a good idea can be done by the compiler, Yep, usually the "inline when appropriate" compiler switch + something like__forceinline for very small functions (for paranoia reasons) seems to be the way to go in my experience. Michael