[armedbear-devel] Inline primitives as static method calls
logicmoo at gmail.com
logicmoo at gmail.com
Tue Nov 10 08:01:14 UTC 2009
Alessio,
Excellent Work!
Your .patch is what I meant.
> when compiled it is translated as a direct call to the static
> method, without passing through the symbol, which is faster than now
Perfect - Yeah
A Side note:
> When interpreted or passed as a higher-order function an
> InlinedPrimitive calls the static method through reflection, resulting
> in slower performance than now.
I wrote a workaround for this into LarKC because of the performance degradation.
So later on....
Like after we have everything working/vetted calling static inlines as much as possible.
And using InlinePrimtives to call reflection...
We'll have some options like: "FixedArityFunctor":
http://larkc.svn.sourceforge.net/viewvc/larkc/trunk/platform/src/com/cyc/tool/subl/jrtl/nativeCode/type/operator/FixedArityFunctor.java
What I did was created a new Class via ASM that contains a single execute(a,b,c,d,e,f) signature per "args used".
That simply calls the static method .
So in InlinePrimitive later suplimented with some extras like:
//The methodWith0Args - methodWithNArgs is what that .java url above generates.
LispObject execute() {
return methodWith0Args.evaluate();
}
LispObject execute(LispObject a0) {
return methodWith1Args.evaluate(a0);
}
LispObject execute(LispObject a0,LispObject a1) {
return methodWith2Args.evaluate(a0,a1);
}
etc
Figured I should mention the "FixedArityFunctor" so we dont get scared off by any performance
degration of higher level calls before we learn all the benefits of inlining static functions!
More information about the armedbear-devel
mailing list