You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2022/08/14 13:36:00 UTC

[jira] [Commented] (GROOVY-10710) operator == is slow when comparing primitive arrays and lists

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

ASF GitHub Bot commented on GROOVY-10710:
-----------------------------------------

paulk-asert opened a new pull request, #1765:
URL: https://github.com/apache/groovy/pull/1765

   … lists




> operator == is slow when comparing primitive arrays and lists
> -------------------------------------------------------------
>
>                 Key: GROOVY-10710
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10710
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-runtime
>            Reporter: L
>            Priority: Major
>         Attachments: test1.groovy
>
>
> To perform checks like  a == b groovy runtime invokes method DefaultTypeTransformation.compareEqual(Object left, Object right).
> This method is OK if both the left side and the right side are arrays. But it is utterly broken if only one side of the comparison is an array:
>  # There are calls to primitiveArrayToList() *before* making sure whether this is really necessary. This results in creation of most likely unnecessary objects (lists). It is much better to perform more checks like 'whether the other operand is a collection or array' and 'if so whether both left and right operand have the same size'.
>  # The conversion with primitiveArrayToList() might also a break normal equals() implementation which compareEqual(Object left, Object right) falls back to if operands do not fall into the special cases. This is because the original operands *are replaced* with results of primitiveArrayToList() and equals() is invoked not on the original objects.
> This problem is present in the current 3.X, 4.X and 5.X versions of groovy.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)