I think the performance issue could be related to groovysh but not the new 
parser.
Here the result of running my script[1], as you could see, it works well:
```
D:\_TEMP\yyy>groovy Test.groovy
result: 5500; elapsed time: 261ms

D:\_TEMP\yyy>groovy Test.groovy
result: 5500; elapsed time: 240ms

D:\_TEMP\yyy>groovy Test.groovy
result: 5500; elapsed time: 275ms

D:\_TEMP\yyy>groovy Test.groovy
result: 5500; elapsed time: 249ms

D:\_TEMP\yyy>groovy Test.groovy
result: 5500; elapsed time: 259ms

D:\_TEMP\yyy>groovy -v
Groovy Version: 3.0.6 JVM: 15 Vendor: Azul Systems, Inc. OS: Windows 10
```

Cheers,
Daniel Sun

[1] my script:
```
def begin = System.currentTimeMillis() 

// 500 lines of "1 + 10 +"
def result = new GroovyShell().evaluate '''
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10 +  
1 + 10 +
1 + 10 + 
1 + 10 + 
1 + 10 +  
1 + 10
'''

def end = System.currentTimeMillis() 

println "result: $result; elapsed time: ${end - begin}ms"

```


On 2020/10/19 11:06:25, Stephen Mallette <spmalle...@gmail.com> wrote: 
> I was using 3.0.6 actually (I'd downloaded it to make sure that it wasn't
> our extension of groovysh that was causing some difference). But to be
> sure, I just retested it on 3.0.6 and 2.5.13. I built a 500 line script of
> "addition". For 2.5.13 I got:
> 
> groovy:000> start = System.currentTimeMillis()
> ===> 1603105239050
> groovy:000> 1 + 10 +
> groovy:001> 1 + 10 +
> groovy:002> 1 + 10 +
> groovy:003> 1 + 10 +
> groovy:004> 1 + 10 +
> groovy:005> 1 + 10 +
> groovy:006> 1 + 10 +
> ...
> groovy:495> 1 + 10 +
> groovy:496> 1 + 10 +
> groovy:497> 1 + 10
> ===> 5478
> groovy:000> System.currentTimeMillis() - start
> ===> 1193
> 
> and on 3.0.6 I got:
> 
> groovy:000> start = System.currentTimeMillis()
> ===> 1603105244825
> groovy:000> 1 + 10 +
> groovy:001> 1 + 10 +
> groovy:002> 1 + 10 +
> groovy:003> 1 + 10 +
> groovy:004> 1 + 10 +
> groovy:005> 1 + 10 +
> groovy:006> 1 + 10 +
> ...
> groovy:495> 1 + 10 +
> groovy:496> 1 + 10 +
> groovy:497> 1 + 10
> ===> 5478
> groovy:000> System.currentTimeMillis() - start
> ===> 31876
> 
> 
> 
> 
> 
> 
> 
> On Mon, Oct 19, 2020 at 6:40 AM Daniel Sun <sun...@apache.org> wrote:
> 
> >
> > Please try 3.0.6+, we have tuned the performance a lot.
> >
> > Cheers,
> > Daniel Sun
> > On 2020/10/16 18:58:28, Stephen Mallette <spmalle...@gmail.com> wrote:
> > > Hello,
> > >
> > > I happened to be testing some issues related to this pull request I
> > > submitted the other day:
> > >
> > > https://github.com/apache/groovy/pull/1405
> > >
> > > In testing between groovy 2.5.x and 3.x I've noticed a considerable
> > > performance difference when pasting long multi-lined scripts. 2.5.x is
> > > quite quick to accept the input whereas 3.x seems to slow more and more
> > as
> > > additional lines are consumed. While I did more complex tests trying to
> > get
> > > to the bottom of the problem, it's fairly easy to recreate with a simple
> > > addition script:
> > >
> > > 1 + 10 +
> > > 1 + 10 +
> > > 1 + 10 +
> > > 1 + 10 +
> > > 1 + 10 +
> > > ... repeated a bunch of times and then ended with
> > > 1
> > >
> > > copy that out of your text editor and just paste it into both versions of
> > > groovsh and see the difference. I've found 500 lines demonstrates it well
> > > but you could probably get away with less and still see the difference of
> > > evaluation at play.
> > >
> > > I tried to do some profiling to try to isolate the problem myself, but
> > > things got a little too deep into antlr4 for me and I got lost. Does
> > anyone
> > > have any ideas as to what might be different for 3.x?
> > >
> >
> 

Reply via email to