Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Eric Dahlman <edahlman@atcorp.com>
To: John J Lee <jjl@pobox.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Executable size?
Date: Thu, 13 Nov 2003 14:36:39 -0600	[thread overview]
Message-ID: <3FB3EB57.8070305@atcorp.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0311131923420.598@alice>

John J Lee wrote:

>>the setting up the initial environment.  In the case of gcc this is
>>captured in three files which a linked with each C program.  They are
>>
>>crtbegin.o 1.6k
>>crtend.o   1.2k
>>libgcc.a  46.3k
>>
>>So it would be reasonable to say that the C runtime is 49k.
>>
>>Now in the case of O'Caml I don't know what the exact numbers are but
>>the ZINC interpreter is on the order of 75k and that includes the ocaml
>>runtime. So they are really similar, really the only big difference in
>>runtime requirements for OCaml is the garbage collector.
> 
> [...]
> 
> OK.  Getting back to the original question again (how to reduce data to be
> transferred over the network), both O'Caml and C statically link this
> runtime stuff, right?  So, why is O'Caml's "hello world" (compressed) 45k,
> to C's 1 or 2k?  Is that 43k the garbage collector?  Or is it mostly that
> O'Caml, in contrast to C, is linking in a bunch of stuff from its standard
> library that isn't strictly required for "hello world"?  Or something else
> again??

I can't say off hand and I don't have the time to research it.  My back 
of the envelope guess is that it is just not worth the effort to throw 
more stuff away in ocaml.  On a high level you can think of the 
language's runtime as providing the features of the hardware that it 
needs but are not present.  So if you were to port ocaml to run on an 
old Symbolics Lisp machine you could rely on the hardware GC and leave 
that out of your runtime.  This is where C has its first "advantage" in 
that it generally is a close match to the hardware model it is running 
on so there is less for the runtime to implement.  If you want to get an 
idea of what is in such a runtime the documentation for the one GCC uses 
is here:

http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc

Now the second advantage that C has is that it is easier for the linker 
to identify which functions could never be called and strip them out of 
the resulting binary.  That is why in the case of a simple hello world 
program you can get down to basically having none of the runtime code left.

In the old days this was very important and I have used old Unix 
machines that only had static linking.  Those machines also had tiny 
disk drives so there was significant pressure when C was developing to 
make sure you could strip everything down as much as possible.

The basic problem with getting a language like ocaml down that small is 
that there is really no need or desire to do so and even then payoff is 
really small.  You can only leave out the parts you don't use but then 
again if you want to do something cool you will be using those parts. 
You will only win if you are writing primitive C style programs in ocaml 
(not that C programs are primitive but a fancy C program would also pull 
in library dependencies).

So I would say that it is totally possible to "enhance" a language like 
ocaml to generate tiny hello world executables, but I would much rather 
have the bright people working on O'Caml write something of more value. 
  I know that my definition of value is probably at odds with yours in 
this case. ;-)

-Eric



-------------------
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-11-13 20:37 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-12 16:14 John J Lee
2003-11-12 17:33 ` Richard Jones
2003-11-12 18:06   ` Dustin Sallings
2003-11-12 18:31     ` Sven Luther
2003-11-12 18:50       ` John J Lee
2003-11-13  9:10         ` Sven Luther
2003-11-13 13:46           ` John J Lee
2003-11-13 14:28             ` Sven Luther
2003-11-12 18:21   ` John J Lee
2003-11-12 22:53     ` Richard Jones
2003-11-12 23:50       ` John J Lee
2003-11-15 12:48     ` skaller
2003-11-15 15:25       ` John J Lee
2003-11-12 19:06   ` Brian Hurt
2003-11-12 18:38     ` Sven Luther
2003-11-12 19:04       ` Karl Zilles
2003-11-12 21:29         ` Brian Hurt
2003-11-12 20:03       ` Brian Hurt
2003-11-13  4:14         ` Kamil Shakirov
2003-11-13  9:06           ` Richard Jones
2003-11-13  9:18         ` Sven Luther
2003-11-12 18:46     ` John J Lee
2003-11-12 20:40       ` Brian Hurt
2003-11-12 20:10         ` Basile Starynkevitch
2003-11-12 20:35         ` John J Lee
2003-11-12 21:51           ` Brian Hurt
2003-11-12 21:35             ` David Brown
2003-11-12 22:12           ` Eric Dahlman
2003-11-12 23:32             ` Brian Hurt
2003-11-12 22:53               ` Eric Dahlman
2003-11-12 23:35               ` John J Lee
2003-11-12 23:44             ` John J Lee
2003-11-13  0:26               ` Karl Zilles
2003-11-13  1:29                 ` [Caml-list] F-sharp (was: Executable size?) Oleg Trott
2003-11-14  6:04                   ` [Caml-list] float_of_num Christophe Raffalli
2003-11-13 15:43               ` [Caml-list] Executable size? Eric Dahlman
2003-11-13 19:58                 ` John J Lee
2003-11-13 20:36                   ` Eric Dahlman [this message]
2003-11-13 22:16                     ` John J Lee
2003-11-15 13:41                   ` skaller
2003-11-15 15:13                     ` John J Lee
2003-11-15 18:07                       ` skaller
2003-11-15 13:36                 ` skaller
2003-11-15 15:01                   ` John J Lee
2003-11-15 17:53                     ` skaller
2003-11-13 13:37         ` Florian Hars
2003-11-12 18:05 ` Dustin Sallings
2003-11-12 18:36   ` John J Lee
2003-11-12 19:04     ` Dustin Sallings
2003-11-12 20:17       ` John J Lee
2003-11-12 20:01     ` Vitaly Lugovsky
2003-11-13  1:23 ` Nicolas Cannasse
2003-11-15 12:09 ` 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=3FB3EB57.8070305@atcorp.com \
    --to=edahlman@atcorp.com \
    --cc=caml-list@inria.fr \
    --cc=jjl@pobox.com \
    /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