Date: Fri, 10 Sep 1999 15:14:39 +0200
From: Jerome Vouillon <Jerome.Vouillon@inria.fr>
To: Nicolas Ollinger <firstname.lastname@example.org>,
Subject: Re: Efficency in OCaml
In-Reply-To: <Pine.GSO.3.96.990904165113.25828Aemail@example.com>; from Nicolas Ollinger on Sat, Sep 04, 1999 at 05:26:33PM +0300
On Sat, Sep 04, 1999 at 05:26:33PM +0300, Nicolas Ollinger wrote:
> 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
This is correct.
> I'm intrigued by this second field, what is the use of this
> id ? Where is the necessity to identify uniquely every object ?
This allows to compare objects using "(<)" or "compare" (and therefore
makes it easy to create sets of objects).
> Concerning marshaling of objects, a simple solution is to use a function
> 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
> 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 information about the module in which the class is declared, and
> so one.
This would work. The hard part is to generate this information...
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:25 MET