> Yes.  In a constructor function, the hidden class begins with an 
> element that also includes a prototype.  In two different constructor 
> functions these initial elements will be different, making their 
> hidden classes different.  

Does this mean that if I make sure that both the mongo driver and my code 
uses the literal empty object {} for creating new objects they will share 
the same root class?

On Friday, July 20, 2012 2:21:39 AM UTC-3, jMerliN wrote:
>
> Hi Sebastian, 
>
> > It is my understanding that hidden classes are not shared between 
> different 
> > constructors, even if I construct structurally identical objects with 
> the 
> > same properties and in the same order. This seems to imply that 
> > deserialized objects coming from mongodb will not share the same hidden 
> > class as structurally identical objects created by the constructors, 
> hence 
> > functions that use these objects will not be well optimized into native 
> > code. Am I right? 
>
> Yes.  In a constructor function, the hidden class begins with an 
> element that also includes a prototype.  In two different constructor 
> functions these initial elements will be different, making their 
> hidden classes different. 
>
> If you have hot code that is being impacted because you pass it both 
> objects you construct and ones from the MongoDB driver you're using, 
> one thing you can do is make your constructor take the MongoDB object 
> representation as an input.  Then you would be able to make your hot 
> code monomorphic.  If you don't have any hot code being impacted, it's 
> probably not something you should worry about unless your Mongo driver 
> is putting objects it constructs into dictionary mode for some reason. 
>
> An example: http://jsfiddle.net/xznxP/ 
>
> "hot" only deoptimizes when given the raw object here, which has a 
> different hidden class. 
>
> > Is there any hidden class inheritance built into v8? That is, if I 
> create 
> > object o={a:1, b:2} and later add o.z=3, will native code optimized for 
> the 
> > hidden class before the property-add still work unmodified afterwards? 
>
> No. 
>
> - Justin 
>
> On Jul 19, 4:16 pm, Sebastian Ferreyra Pons <[email protected]> 
> wrote: 
> > I have two questions. 
> > 
> > #1 
> > I'm developing a Node.js/Mongodb web app. 
> > 
> > This means that objects used in the code will be created by at least two 
> > different code paths: 
> > 
> >    1. Constructor functions 
> >    2. Deserialization code in the mongo driver. 
> > 
> > It is my understanding that hidden classes are not shared between 
> different 
> > constructors, even if I construct structurally identical objects with 
> the 
> > same properties and in the same order. This seems to imply that 
> > deserialized objects coming from mongodb will not share the same hidden 
> > class as structurally identical objects created by the constructors, 
> hence 
> > functions that use these objects will not be well optimized into native 
> > code. Am I right? 
> > 
> > #2 
> > Is there any hidden class inheritance built into v8? That is, if I 
> create 
> > object o={a:1, b:2} and later add o.z=3, will native code optimized for 
> the 
> > hidden class before the property-add still work unmodified afterwards? 
>

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to