JEPs proposed to target JDK 9 (2015/1/15)

Remi Forax forax at
Mon Jan 19 08:15:43 UTC 2015

On 01/19/2015 07:45 AM, A. Sundararajan wrote:
> Hi,
> If the NodeVisitor interface includes default implementation that 
> calls visitUnknown method, then your scheme could be implemented as 
> visitUnknown override (i.e., Class->lambda selection logic and 
> maintaining state etc).

but the whole idea is to remove the NodeVisitor interface which is not 
enough flexible.

Note that the problem of being able to add new visit method and add new 
expression node
is not a new problem, Philip Wadler name it the expression problem [1].
And even, the approach to use getClass()/reflection to escape the Java 
type system to 'solve' this issue
is not new too [2]. I've written 'solve' between quotes because using a 
dynamic cast doesn't solve
anything in theory.

It's just that now we have lambdas, we have a nice way to decouple the 
selection of the behavior from the AST hierarchy
so we don't need any Visitor interface anymore.

> Also, users can implement few selective visitABC methods - as the rest 
> have default implementation - which is one of the advantages your 
> scheme - selectively implement visit for only few types.

You can also solve that by inheriting a default visitor implementation 
(or worst default methods on an interface)
but it's always more flexible to use composition over inheritance.

> Thanks,
> -Sundar



> On Friday 16 January 2015 04:22 AM, Remi Forax wrote:
>> On 01/15/2015 11:31 PM, mark.reinhold at wrote:
>> [...]
>>>    236: Parser API for Nashorn
>>> Feedback on these proposals is more than welcome, as are reasoned
>>> objections.  If no such objections are raised by 23:00 UTC next
>>> Thursday, 22 January, or if they're raised and then satisfactorily
>>> answered, then per the JEP 2.0 process proposal [1] I'll target
>>> these JEPs to JDK 9.
>>> (This information is also available on the JDK 9 Project Page [2]).
>>> - Mark
>> for JEP 236, I'm not sure that we need a visitor anymore along with 
>> the AST, now that we have lambdas,
>> a HashMap AST node -> function to execute, is enough.
>> see for an example of usage
>> and  the definition of a Visitor
>> Note: that this 'new visitor' doesn't need any support method 
>> (usually named 'accept') defined on the AST node.
>> cheers,
>> Rémi

More information about the nashorn-dev mailing list