Весь ли Groovy-код допустим с Groovy ++?
Вопрос
После того, как увидел эта ссылка, Я хочу попробовать Groovy ++, но у меня есть беспокойство;
Допустим ли весь синтаксис Groovy в Groovy ++?
Например, я могу сделать это в Groovy:
def list = [1,2]
Допустим ли приведенный выше код в Groovy ++?
Решение
Цель (я полагаю) состоит в том, чтобы заставить его поддержать как можно больше Groovy Code.
Я полагаю, что в настоящее время есть несколько областей, которые не работают, включая:
- Несколько заданий - не компилируется
- А Оператор спредоотданий может вызвать проблемы в некоторых ситуациях
- . с {} не работает
Но вы всегда можете обойти эти проблемы или не отмечать класс, который нуждается в них как @Typed
Другие советы
Есть список различий с образцами кода в http://groovy.dzone.com/articles/grovycomparetogrovy-part-1
Некоторые из различий:
- более строгие проверки времени компиляции
- Модификации типа без лета с ExpandometAclass
- Закрытие не может изменить переменные вне кода закрытия
- Нет прямых доступа к частным методам
Должно быть, так как в Groovy ++ вы можете:
- Легкое смешивание статического и динамически напечатанного кода
а) Не волнуйтесь. Производительность не является проблемой, ни Groovy, ни Groovy ++. С обоими языками вы в основном пишете клей-логику. Код, который соединяет различные библиотеки Java. И эти библиотеки написаны на Java - поэтому они работают на полной скорости.
Иногда вы замечаете, что вы написали большую код в Groovy, и вы хотели бы добавить дополнительную скорость. Без проблем. Groovy отлично подходит для прототипа вашего алгоритма. Поскольку Groovy имеет синтаксис, похожий на Java, и использует все эти библиотеки Java, нет проблемы преобразовать ваш прототип в библиотеку Java, которая работает на полной скорости (да, вы должны кодировать его вручную, но это означает, что вы » Только «нужно удалить все эти коротки из вашего Groovy Code, чтобы превратить его в Java).
б) Насколько я понимаю Groovy ++, он работает через аннотации. Только если вы аннотируете код, он будет распознаваться как Groovy ++ -код. Так что это должно работать. Но, как вы можете видеть из всех этих ответов, не слишком много людей используют Groovy ++ на данный момент, поскольку производительность не проблема (см. :-).
Кстати: я думаю, что вилка Groovy ++ скоро будет объединена в стандартный Groovy Trunk ...
@Typed (typepolicy.mixed) делает живой разработчик, который хочет оптимизировать код, используя Groovy ++, безусловно, проще. Однако это не полностью поддерживает Groovy Code.
Есть еще проблемы, даже с совместимостью с кодом Groovy ++ с использованием @typed (typepolicy.mixed)
Например, отличное литье типа стиля (используя ключевое слово «как»)
String foo = myUntypedFoo as String
нужно изменить на
String foo = (String)myUntypedFoo
Также переменные, которые объявляются вне закрытия, не могут быть использованы непосредственно в этих закрытиях:
@Typed(TypePolicy.MIXED)
def countMatches( List<String> bahList, String pattern ){
int counter = 0
bahList.each{ String bah ->
if (bah==pattern) counter++
}
}
Должен быть изменен в стиль Java (побеждает цель Groovy ++) или вы должны использовать эталонные объекты.
Groovy ++ очень полезен для улучшения производительности Groovy/Grails, но это, конечно, не простой способ, и я не уверен, если мне следует использовать Java.
Groovy ++ представил аннотацию @Typed(TypePolicy.СМЕШАННАЯ), которая полностью совместима с Groovy.
Используя @Typed(политика типов.ДИНАМИЧЕСКАЯ) или не используя @Typed вообще, вы потеряете все преимущества Groovy ++.
СМЕШАННАЯ политика типов оптимизирует статические места, если это возможно.