caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: skaller <skaller@ozemail.com.au>
To: John J Lee <jjl@pobox.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Executable size?
Date: 16 Nov 2003 04:53:56 +1100	[thread overview]
Message-ID: <1068918835.25869.263.camel@pelican> (raw)
In-Reply-To: <Pine.LNX.4.58.0311151457531.5150@alice>

On Sun, 2003-11-16 at 02:01, John J Lee wrote:
> On Sat, 16 Nov 2003, skaller wrote:
> [...]
> > A very large number of people do in fact build C all the
> > time without any runtime library at all: embedded systems
> > typically don't use any runtime.
> 
> When you say "runtime", do you mean stuff like libc.so, or libgcc.a, or
> both?

Neither, crt0 is the key. It isn't a library, but initialisation
code.

> When, if ever, can you avoid linking with libgcc.a (or its equivalent)?
> What do you lose by not linking with it?

You cannot make a traditional 'main' program without some
runtime support. This does things like pass command line
arguments to 'main'. It also sets up registers for the
generated code. For example on the x86 it is common
to set all the segment registers equal. The startup
code may also set up the floating point unit, signal
handlers, etc.

However, no 'library' code is ever required by ISO C
programs unless you actually call the functions or
refer to some variable. Still, if you consider
say 'errno', evil as it is, you might refer to it
even if you never do any file IO, so it had better
be correctly initialised.

Finally, even if you don't do IO, something like
an 'assert' macro might, so perhaps *some* initialisation
of some thing might be done in case you use them,
with the compiler not really knowing if it is necessary or not.

In C++, some initialisation for exception handling, RTTI,
and other stuff may be needed .. even if you don't use it,
it may be included *in case* you use it. In particular,
this may be necessary if you dynamically link to a shared
library that does use these features, and they're global
and have to be set up on startup (RTTI and exception handling
spring to mind here ..)

Even on embedded systems, there is usually initialisation
code, though it is often hand written by the client 
(in assembler).

Finally, there is a special case where you must NOT
use a runtime library, even on a hosted machine.

And that is when bootstrapping the compiler and compiling
the run time :-)

> I don't ask for any practical reason, just to try and sort out how O'Caml,
> C and C++ differ here.

Well, for Ocaml the gc must be set up. In addition, signal and
thread handling might have to be initialised. Perhaps some
data such as command line arguments is fetched by startup
code, whether or not you actually try to access it.

The principal difference between Ocaml and C is that
C is designed to be able to generate things like Linux
kernels, and you certainly don't want to use the standard C
library doing that: you're trying instead to build particular
machine code in a 'high level way', and need to actually
write all the functions you need yourself... since it is
this kernel that actually provides some of the resources
accessed by user space C libraries :-)

Ocaml doesn't try to be a systems programming language,
that's the difference.


-------------------
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-15 18:54 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
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 [this message]
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=1068918835.25869.263.camel@pelican \
    --to=skaller@ozemail.com.au \
    --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;
as well as URLs for NNTP newsgroup(s).