Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Object-oriented access bottleneck
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Olivier Andrieu <andrieu@i...>
Subject: Re: [Caml-list] Object-oriented access bottleneck
 Nuutti Kotivuori [Tuesday 9 December 2003] :
 >
 > Nicolas Cannasse wrote:
 > > Obj.set_field (Obj.repr (Some 0)) 1000000 (Obj.repr ())
 > >
 > > But I'm quite surprise that's it's not inlined and slower than
 > > setting a record field (according to the bench results)... and even
 > > slower than calling method (???)
 > 
 > The implementation of Obj.set_field is:
 > 
 >   external set_field : t -> int -> t -> unit = "%obj_set_field"
 > 
 > Where %obj_set_field is merely:
 > 
 >   Parraysetu Pgenarray;
 > 
 > from the primitives_table, which is pretty generic.
 > 
 > I am not sure why it isn't inlined either. It doesn't get inlined even
 > when having the declaration in the same source file.

What are you talking about ? 
The Obj module and in particular Obj.set_field is about modifying caml
values (records, variants, tuples, whatever), not caml objects.

Access to instance variable in objects is not inlined because you
can't statically known in which slot is the variable. Ex:

  class foo = object val x = 0 end
  class bar = object val y = 1 inherit foo end

In an object foo, x is in slot 0, but in an object bar, x is in slot
1. (Actually that's not 0 and 1 but 2 and 3 because the object stores
other stuff in the first two slots).

-- 
   Olivier

-------------------
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