caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: Jeff Henrikson <jehenrik@yahoo.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] dlopen win32 port
Date: Sat, 1 Sep 2001 12:06:52 +0200	[thread overview]
Message-ID: <20010901120652.A24206@pauillac.inria.fr> (raw)
In-Reply-To: <000401c13268$48473ba0$0b01a8c0@mit.edu>; from jehenrik@yahoo.com on Fri, Aug 31, 2001 at 06:00:01PM -0400

> > Xavier Leroy wrote on 8/24:
> >"dynamic_loading" branch on the OCaml development sources
> >(camlcvs.inria.fr).  I'll post more information about it once I'm
> >happy with the result, to get some feedback on the design.
> 
> I checked out these sources and did some superficial diffing of it,
> and it wasn't obvious to me which the salient changes were.  I think
> I was diffing source that was too old though (3.01).  A big mess.
> Is this code for dynamic linking FFI code like DlOpen, or for the
> general problem of incorporating typing info and etc from one Caml
> module into another at runtime?

I haven't looked at this DlOpen library yet, so I'll pass.  But here
is a short description of what I implemented recently.  I thought I
posted it already on this list, but can't find it in the archives, so
here we go again.

  The goal of this work is to allow bytecode to refer to
  libraries such as Unix, Str, etc, without having to be linked in
  -custom mode.

  In other terms: currently, when a library such as Unix
  (which contains C stub code in a library archive libunix.a) is linked in,
  ocamlc generates a custom runtime system statically linked with
  libunix.a, and sticks the Caml bytecode at the end of this custom
  runtime system.  This has two drawbacks: 1- the bytecode is no longer
  machine-independent, since it is attached to a native executable (the
  custom runtime system); 2- you need a C compiler and linker around,
  which many Windows users don't have.

  With the new scheme, ocamlc simply generates a machine-independent
  bytecode executable that says "by the way, I'll need the libunix C
  stub code"; and ocamlrun dynamically links libunix.so and resolves the
  references to C external functions.  Voila, bytecode is
  machine-independent, and no C compiler is required.

  This also allows to load dynamically .cma files that refer to C stub
  code, either at the toplevel (#load) or with Dynlink.  The C stub code
  is loaded dynamically in a fully transparent fashion.  It's quite cool
  to type #load "labltk.cma";; in the toplevel and have LablTk working
  like a charm, without all these pesky "ocamlmktop" commands.

  Obligatory backward compatibility note: this new mechanism doesn't
  deprecate the -custom mode, which is still supported.  No existing
  code should break.

- Xavier Leroy
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  reply	other threads:[~2001-09-01 10:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-08-31 22:00 Jeff Henrikson
2001-09-01 10:06 ` Xavier Leroy [this message]
2001-09-01 18:47   ` [Caml-list] dynamic linking ocamlopt? Jeff Henrikson

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=20010901120652.A24206@pauillac.inria.fr \
    --to=xavier.leroy@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=jehenrik@yahoo.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).