Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Nicolas Ollinger <nollinge@cs.utu.fi>
To: Jerome Vouillon <Jerome.Vouillon@inria.fr>
Cc: caml-list@inria.fr
Subject: Re: Efficency in OCaml
Date: Sat, 4 Sep 1999 17:26:33 +0300 (EET DST)	[thread overview]
Message-ID: <Pine.GSO.3.96.990904165113.25828A-100000@lena.cs.utu.fi> (raw)
In-Reply-To: <19990902010939.12962@pauillac.inria.fr>

On Thu, 2 Sep 1999, Jerome Vouillon wrote:

> On Wed, Sep 01, 1999 at 02:40:21PM -0400, chet@watson.ibm.com wrote:
> > Is there a description of the Ocaml object and
> > "virtual-function-table" format?

(snip description of buckets use)

I played a little with objects representation in OCaml 2.xx. As far as
I understand, at least in bytecode, class instances are represented as
boxed values tagged object_tag with n+2 fields : then first field is the
method array array described by Jerome in last mail, the second field
seems to be a unique id associate to the object, other fields are used
for instance variables in the order of declaration, inherited variables
first. As the method array array is unique for each class, it can be used
to identify the class (notice that classes are represented as global
variables). I'm intrigued by this second field, what is the use of this
id ? Where is the necessity to identify uniquely every object ?

Concerning marshaling of objects, a simple solution is to use a function
like:

let crunch o =
  let r = Obj.dup (Obj.repr o) in
  let idclass = compute_id (Obj.field r 0) in
  Obj.set_field r 1 idclass;
  Obj.set_tag r Obj.marshaled_object_tag
  r;;

with compute_id a function that deduce a unique class id of the object.

Then unmarshaling is just doing the inverse operation. Of course, if
you want to share objects between different programs then you must add
some informations about the module in which the class is declared, and
so one.

Any comment ?

N.
--





  reply	other threads:[~1999-09-06  8:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <7qj9lv$aa9$1@goldenapple.srv.cs.cmu.edu>
1999-09-01 18:40 ` chet
1999-09-01 23:09   ` Jerome Vouillon
1999-09-04 14:26     ` Nicolas Ollinger [this message]
1999-09-10 13:14       ` Jerome Vouillon
1999-09-10 15:19     ` Hendrik Tews
1999-09-10 19:03       ` chet
1999-09-15 12:39       ` Jerome Vouillon

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=Pine.GSO.3.96.990904165113.25828A-100000@lena.cs.utu.fi \
    --to=nollinge@cs.utu.fi \
    --cc=Jerome.Vouillon@inria.fr \
    --cc=caml-list@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