[
https://issues.apache.org/jira/browse/GROOVY-7933?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15486826#comment-15486826
]
Jose Ignacio Acin Pozo edited comment on GROOVY-7933 at 9/13/16 9:58 AM:
-------------------------------------------------------------------------
Should @CompileStatic and interpreted behaviour actually be different? I think
it sort of makes sense as @CompileStatic methods should be chosen at compile
time(like Java does) instead of runtime (like Groovy does):
>From http://groovy-lang.org/differences.html#_multi_methods :
"In Groovy, the methods which will be invoked are chosen at runtime. This is
called runtime dispatch or multi-methods. It means that the method will be
chosen based on the types of the arguments at runtime. In Java, this is the
opposite: methods are chosen at compile time, based on the declared types."
>From
>http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/CompileStatic.html
> :
"This will let the Groovy compiler use compile time checks in the style of Java
then perform static compilation, thus bypassing the Groovy meta object
protocol. When a class is annotated, all methods, properties, files, inner
classes, etc. of the annotated class will be type checked."
Also more info taken from here
http://java-performance.info/static-code-compilation-groovy-2-0/ :
"Both these features are connected, because you need a type inference in order
to statically choose the best matching method at compile time. Static type
checking allows you to check your Groovy code for type safety as well as for
absence of typos in the method/property names."
"Static compilation allows Groovy 2.0 to generate direct method calls, which
are no longer using Groovy runtime as an intermediary. This feature actually
allows you to avoid going into the Groovy runtime for the huge share of methods
– think how many overloaded methods do you usually have in your code –
non-overloaded methods could always be safely converted into the normal method
calls."
was (Author: [email protected]):
Should @CompileStatic and interpreted behaviour actually be different? I think
it sort of makes sense as @CompileStatic methods should be chosen at compile
time(like Java does) instead of runtime (like Groovy does):
>From http://groovy-lang.org/differences.html#_multi_methods :
"In Groovy, the methods which will be invoked are chosen at runtime. This is
called runtime dispatch or multi-methods. It means that the method will be
chosen based on the types of the arguments at runtime. In Java, this is the
opposite: methods are chosen at compile time, based on the declared types."
>From
>http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/CompileStatic.html
> :
"This will let the Groovy compiler use compile time checks in the style of Java
then perform static compilation, thus bypassing the Groovy meta object
protocol. When a class is annotated, all methods, properties, files, inner
classes, etc. of the annotated class will be type checked."
Also more info taken from here
http://java-performance.info/static-code-compilation-groovy-2-0/ :
"Static compilation allows Groovy 2.0 to generate direct method calls, which
are no longer using Groovy runtime as an intermediary. This feature actually
allows you to avoid going into the Groovy runtime for the huge share of methods
– think how many overloaded methods do you usually have in your code –
non-overloaded methods could always be safely converted into the normal method
calls."
> Incorrect boxing of boolean primitive types
> -------------------------------------------
>
> Key: GROOVY-7933
> URL: https://issues.apache.org/jira/browse/GROOVY-7933
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Affects Versions: 2.4.7
> Reporter: Henri Tremblay
>
> A boolean primitive type seems to be boxed for no apparent reason. See the
> example below. The problem disappear when using @CompileStatic or if
> explicitly casting to (boolean).
> {code:java}
> public class Demo {
> public void a(boolean a){
> System.out.println("boolean was called");
> }
> public void a(Object a){
> System.out.println("Object was called");
> }
> }
> class Groovy {
> static void main(String[] args) {
> def demo = new Demo()
> demo.a(true)
> }
> }
> {code}
> *Output:*
> Object was called
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)