2011-09-05 19 views
13

Si entiendo correctamente, Groovy está tipeado dinámicamente, pero dado que es casi un superconjunto de Java, opcionalmente se puede proporcionar información de tipo estático. Esto podría ser útil si se escribe algo donde solo unas pocas partes son críticas para el rendimiento, al tiempo que se evita la fricción de utilizar varios idiomas. Las anotaciones de tipo solo se pueden proporcionar para las partes críticas de rendimiento.¿El estilo de Java Groovy es tan rápido como Java?

¿Cuál es la penalidad de rendimiento por usar Groovy en lugar de Java en funciones/clases donde se usa el subconjunto tipo Java y se proporcionan anotaciones de tipo estático?

Respuesta

12

Declarar tipos en groovy no acelera mágicamente las cosas. Sigue siendo un código groovy y necesita pasar por el MOP en caso de que algo haya cambiado dinámicamente. No obtiene enlaces estáticos solo porque ha proporcionado información de tipo.

Para cosas sensibles al rendimiento que el código groovy simplemente no es lo suficientemente rápido, tendrá que escribir el código de Java real.

Esta pregunta es muy similar a un previous one donde gave an answer la excavación en el código de bytes generada mostrando cómo escribir algo no acelerar las cosas.

+0

Creo que esta respuesta está desactualizada ahora que '@ CompileStatic' se ha agregado al idioma principal de Groovy. – ArtB

8

También puede usar Groovy ++. Coloque groovypp.jar en classpath y anote un paquete, clase o método con @Typed. El código anotado pasa by-the MOP, por lo tanto es virtualmente tan rápido como el código de Java.

E incluso si no declara un tipo, @Typed code deducirá el tipo si es posible en tiempo de compilación.