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

Reply via email to