On Jul 20, 2009, at 11:48 AM, Brian Barnes wrote:

I'm not sure you get exactly what I'm saying as you put class in places where I'd expect property. For instance:

"
I looked briefly, and it seems like it would be relatively easy to add an API for adding C getters and setters to a class individually. So, that seems like a reasonable feature request. "

Replacing class with property is what I'd expect here, i.e., each property set on an object has it's own getter and setter. Something like:

void JSObjectSetPropertyWithCallback (ctx ,object ,propertyName ,value,getterFunction,setterFunction,attributres,exception);

Also I'm a little worried about the word "dynamic", these are definitely static. I have all the functions created, you just have a pointer to them. If the pointer exist, call it for the value and break out. If it doesn't, go down the chain. More pseudo code:
From the point of view of the runtime any property with a getter/ setter is dynamic -- they can't be optimised.


void main(...)
{
obj=JSObjectMake(ctx,NULL,NULL);
JSObjectSetPropertyWithCallback(ctx,obj,"red",JSValueMakeNull (),myRedGetter,myRedSetter,attributes,exception);
}

JSValueRef myRedGetter(...ctx...object...exception)
{
return(JSValueMakeNumber(red_value));
}

bool myRedSetter(..ctx..object..value..exception)
{
red_value=JSValueToNumber(ctx,value,exception);
}

Here are the benefits (as I see them):

1) I don't need to define classes for objects; right now, the only reason I would need to create classes (instead of just passing NULL) is to setup the getters & setters. This reduces workload and generalizes a lot of my code

However it takes more memory, the class based properties are effectively what are used for the DOM, eg. the getters and setters are defined on a prototype object that is shared among all instances of the class.


2) The JS engine has already looked up the property by name; with class based getters/setters, I also have to lookup the property by name. With property based getters/setters, it's only looked up once and directly called to me. This should be a big savings win and should be more simple at the back end (if there's no getter/setter associated with a property, just skip forward down the chain.)

I'm not sure how this could be anything but faster then class-based.
If you're using getters and setters you've already destroyed performance as getters and setters aren't optimisable so the additional cost is likely to be irrelevant. Additionally the per- object instances of the getter/setter function is likely to increase memory usage and gc pressure, both of which could actually hurt performance.

Note: I'm not saying this isn't a reasonable feature request, i'm just trying to emphasise that getters/setters are expensive, and performance characteristics are hard to guess without actually measuring.

In the mean time you could work around this API deficiency by creating a function object and then manually calling __defineGetter__, etc to set up your getter/setter code.

--Oliver

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to