2015-04-13 2 views
7

Я прочел следующее: http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/CompileStatic.html, и это: Should I use Groovy's @CompileStatic if I'm also using Java 7, и понять, что, безусловно, есть улучшения в производительности, но это так? Я не совсем понимаю, что делает @CompileStatic.Когда/почему я хочу использовать Groovy @CompileStatic?

Есть ли определенные классы, по которым добавление @CompileStatic не вызывает затруднений? Где я не хочу этого?

+3

Занятия, которые вы хотите ускорить/проверить тип и не нуждаетесь в динамических функциях? –

ответ

11

Приведу свою часть моего ответа на Should I use Groovy's @CompileStatic if I'm also using Java 7:

Хотя быстрее, чем обычный Groovy, он может составить только подмножество Groovy и ведет себя немного по-другому. Особенно все динамические функции недоступны.

Все СС будут обходить стороной. Строители не будут работать в целом, некоторые из них имеют расширения для компилятора, чтобы позволить им проходить. Также методы выбираются во время компиляции с использованием статических типов, в то время как Groovy обычно использует методы, доступные во время выполнения и типы времени выполнения. Это может привести к тому, что будут вызываться различные методы.

Конечно, @CompileStatic также обеспечивает некоторую безопасность, поскольку задача компилятора заключается в проверке программ во время выполнения. Но поскольку статическая информация обречена быть неполной, никогда не может быть 100% -ной безопасности.

Итак, где это без проблем ... хорошо ... POGO, например, поскольку они обычно не содержат всего много кода. И, конечно, для классов, перенесенных с Java на Groovy копией &.

Куда я хочу? Ну, в настоящее время, вероятно, на Android, так как там размер кода оказывает влияние, а статический скомпилированный код более компактен. В противном случае я лично прекрасно разбираюсь в том, что вообще не использую @CompileStatic. Это скорее вопрос вкуса. В некоторых случаях наблюдается улучшение производительности для жестких циклов, но это требует от вас поиска и идентификации, сначала профилируя ваше приложение.

+0

Где этот код цитаты? Не похоже, что из этого ответа вы говорите, что цитируете. – weston

+0

weston, вы правы, я пропустил новую линию, и это заставило его выглядеть как цитата. Я исправил это – blackdrag

Смежные вопросы