groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jochen Theodorou (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-7473) ineffient code generation
Date Thu, 16 Jul 2015 13:46:04 GMT

    [ https://issues.apache.org/jira/browse/GROOVY-7473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14629748#comment-14629748
] 

Jochen Theodorou commented on GROOVY-7473:
------------------------------------------

Because an array is a mutable structure, even if it is handled slightly different than other
mutable structures. That means I cannot see an array as constant and give it for example as
argument to some method and expect I can reuse it later, because the method may change array
elements. Lists are no better and we don't have the semantics that support the usage of constant
lists in this case. So how can we be sure the method backing "in" will not mutate the list?

> ineffient code generation
> -------------------------
>
>                 Key: GROOVY-7473
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7473
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.4.3
>            Reporter: Laurenz Tontsch
>              Labels: performance
>
> Groovy 2.4.3 generates not the most effient byte code of a simple statement like "in".
> e.g. The following statement:
> If object.stringProperty in ["State1", "State2", "State3"
> gets complied in:
> if (DefaultTypeTransformation.booleanUnbox((ScriptBytecodeAdapter.createList(new Object[]
{ "State1", "State2", "State3" }) == null ? 1 : 0) != 0 ? Boolean.valueOf(object.getStringProperty()
== null) : Boolean.valueOf(DefaultGroovyMethods.isCase(ScriptBytecodeAdapter.createList(new
Object[] { "State1", "State2 ", "State3" }), object. getStringProperty ()))))
> instead of this a more effient construct would be the usage of an static list
> e.g.
> static List<String> l1;
> static {
>         l1 = new LinkedList<String>();
>         l1.add("State1");
>         l1.add("State2");
>         l1.add("State3");
> }
> if (DefaultTypeTransformation.booleanUnbox((l1 == null ? 1 : 0) != 0 ? Boolean.valueOf(object.getStringProperty()
== null) : Boolean.valueOf(DefaultGroovyMethods.isCase(l1, object. getStringProperty ()))))



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message