On 25 Sep 2014, at 11:50, Attila Szegedi <[email protected]> wrote:
MemberInfo.java: s/thre/the
BufferArray.java: s/Constructur/Constructor
ApplySpecialization: Set<Expression> argumentsFound could be a boolean instead
of a set.
I need a writable datastructure that is still final outside the loop. I’ll
leave this for now. Might just as easily have done final boolean result[] = new
boolean[1] or something… also ugly.
I asked for comments in Global.extractBuiltinProperties; I don't see them
having been added.
Added
Not directly part of this (but rather earlier work leading up to this), but I
think Global.BOOTSTRAP is a very misleading name. Also, the whole mechanism to
invokedynamic through INVALIDATE_NAME_BOOTSTRAP seems too roundabout to me.
Seems to me we could do a straight invokestatic to
Global.invalidateReservedName().
Done. All that logic gone. See below.
BTW: after thinking about this I noticed that Global.invalidateReservedName()
is an instance method, not a static method. I can see you bind
INVALIDATE_RESERVED_NAME to a Global. Two remarks about that: (1) instance
fields shouldn't be named to look like static constants (2) This all gives the
mistaken impression that invalidation is still per-global instead of
per-context. Really, the whole invokedynamic through
Global.invalidateNameBootstrap should be replaced with an INVOKESTATIC to a
method in ScriptRuntime (which is meant to be our primary script-to-runtime
API), and Global should have no traces of this logic; it's not the place for it.
Fixed. All the logic is moved to a static call in ScriptRuntime, as it should
be. Thanks for spotting this. This is actually legacy from my first
implementation, before I fixed this for all builtin properties.
That phrase "because one of the thinks" in a comment to NativeArray.
setIsLengthNotWritable makes no sense; needs some proofreading.
NativeArray.popInt() JavaDoc has some stray " + " markers in it. Method's
exceptions should be declared in a @throws, not @return
NativeArray.pushInt() JavaDoc: @throws vs. @return too; some others too
Fixed.
Does LinkLogic have to have a cache for the Switchpoints? I'm asking because if
it didn't, then you also wouldn't have to have two fields for PushLinkLogic and
PopLinkLogic in NativeArray, as you wouldn't have to cache those either but
could just always create new instances in getLinkLogic. Just a thought – I can
accept that you can have genuine additional reasons to cache switchpoints in
LinkLogic.
No we don’t need that cache performance wise, but I currently don’t want to
create new link logic instances per callsite I link for push and pop. I am
reluctant to change this now and have to redo all performance measurements so
I’d rather leave it for later, if I may. I don’t think it matters, but I don’t
want to cause any last minute problems.
FinalScriptFunctionData: why are addInvoker methods now returning
CompiledFunction instead of void? Doesn't seem to be used.
Left it like that too, I used them for constructing invoker lists in the
beginning, but not right now, but I see no harm in exposing the return invokers
as return values, it makes a more flexible API possible where you can chain
addInvoker calls for example
GlobalFunctions: admittedly a matter of taste/style, but all those constant and
identity method handles; I might've just declared them as small private static
Java methods instead, e.g. public static int parseInt(Object this, int i) {
return i; } instead of playing with combinators. Works either way, just we end
up with more lambdaforms…
I left it like it is, because it is consitent to the rest of the
specializations right now.
ScriptObject.isProto() seems unused. In any case should be named hasProto…
Removed
Why not remove ScriptObject.checkReservedName?
Removed
That's all.
Attila.
On Sep 24, 2014, at 2:31 PM, Marcus Lagergren <[email protected]>
wrote:
OK, new webrev addressing Attila’s comments and Sundar’s and Hannes’s offline
comments as well is up at : http://cr.openjdk.java.net/~lagergren/8025435.2/
I’ve now moved, as suggested, all abstraction about various optimistic
strategies into the native objects themselves, which indeed cleaned stuff up
nicely. The result is shorter overall codemass. The problem with primitives and
optimistic builtins was present in the old branch itself, only it did not
manifest itself.
Test is clean. Leaving to pick up the kids now, and will run test262 and octane
when I am home with the goal of checking that everything is correct and
verifying my octane performance improvements on a dedicated benchmarking
machine.
Regards
Marcus
On 23 Sep 2014, at 17:36, Marcus Lagergren <[email protected]> wrote:
Guys, guys! This is my review thread for JDK-8025435. Start another one for
this, please…
/M
On 23 Sep 2014, at 17:29, Aleksey Shipilev <[email protected]> wrote:
On 09/23/2014 05:58 PM, Thomas Wuerthinger wrote:
I understood your remark. I just believe that this restriction is not
fundamental to JMH and there *could* be support for languages that do
not statically compile to Java bytecodes as well.
I think this thread side-tracks.
Bottom-line: There are only two ways to hook up dynamically-compiled
language runtime into JMH (say, JS engine), depending who is in control:
a) Ask JS engine to start executing the JS benchmark, *and* call back
into JMH with an AST/bytecode/whatever in hands, asking to measure it.
We would need to generate the synthetic Java code, compile it, load it,
and only then run it, calling back to JS runtime for execution of our
payload -- all in flight, and requiring the tight cohesion.
b) Ask JMH to compile and execute a Java benchmark, and call into JS
engine with a JS script in hands, asking to compile and run it. There,
users statically compile the benchmark JAR, and it runs with minimal
dynamic dances, also going through the standard APIs (javax.script).
While there is nothing fundamental preventing us from exploring the
route (a), it is not as practical as going the well-established route
(b). In other words, "could be done" != "should be done".
-Aleksey.