> On Oct 30, 2015, at 3:38 PM, David M. Lloyd <david.ll...@redhat.com> wrote:
> 
> On 10/30/2015 03:39 PM, Mandy Chung wrote:
>>> On Oct 30, 2015, at 12:59 PM, David M. Lloyd <david.ll...@redhat.com> wrote:
>>> Since this is very likely to be a one-implementation API, is there a reason 
>>> to have a separate WalkerOption interface and Option enum?  Seems like you 
>>> could just skip the interface.
>> 
>> Locals and operands is one experimental feature in mind that is not target 
>> for JDK 9.   But it would be an interesting feature for e.g. Fibers to 
>> experiment.  This will also allow JDK-specific capability to be implemented 
>> in the future.
> 
> Ah, that makes sense, I forgot about cases where the JDK itself might have 
> non-spec extensions.  It should probably be specified in the docs that 
> unrecognized options are either ignored or rejected though.

I decide to take out WalkerOption interface, as I didn’t like that as much for 
supporting one single known extension at the moment.  I found another way doing 
it (by a factory method to return a StackWalker instance with extended 
capability).

> 
>>> All that boxing seems unnecessary... the next best candidate I can see 
>>> though is IntToLongFunction.  I wonder why we didn't do an IntToIntFunction 
>>> in JSR 335.  Or maybe the stream itself should be somehow made aware of the 
>>> optimum batch size.  What's the use case for changing the batch size as you 
>>> iterate?
>>> Is the traversal *that* expensive?
>> 
>> Altering the first batch size would be useful for Log4J and Groovy use cases 
>> that filter implementation classes and finds the caller.   Altering 
>> subsequent batch size is more as a flexible option.  One can simple have the 
>> function to return the same batch size.
> 
> Maybe an overload of walk() which accepts an int (initial batch size) in 
> addition to the function for the simple case?
> 

Maybe.  It’d be good to get further feedback and use cases to decide adding 
another variant.

>> I do think IntSupplier is probably a better choice that won’t restrict to 
>> supply only the initial batch size.   The last batch size parameter is 
>> solely for information.
> 
> UnaryOperator is a good option too

Yup.  I have updated the API to use that.

> (that's what I was looking for before), or maybe even ToIntFunction<X> where 
> X is something that might inform the next batch size based on the work that 
> has already been done - maybe even a Stream<StackFrame> that consists only of 
> the current batch?
> 
> Or another idea:
>  <T> T walk(BiFunction<Stream<StackWalker.StackFrame>, IntConsumer, T> 
> function);
> 
> where the IntConsumer can be called at any time to update a minimum number of 
> remaining frames needed, which in turn can (with the knowledge of how many 
> elements have been consumed by the stream) inform the next batch size.

The stack walker won’t get the next batch until all frames of the current batch 
are consumed.  I think the current walk methods would cover what this one does. 
 There are other ideas to add other variants of the walk methods and short-cut 
for performance.        I keep these ideas in mind and consider them once more 
feedback is collected.

thanks
Mandy

Reply via email to