Groovy Caught BUG
Обнаружил сегодня интересный баг в Groovy 1.8.0. Следующий элементарный скрипт с множественным присваиванием приводит к фатальной ошибке в интерпретаторе Groovy:
// A.groovy
def (a, b) = [1, 2]
Т.е. пишем в консоли groovy A.groovy
и получаем ошибку:
Caught: BUG! exception in phase 'conversion' in source unit 'A.groovy' org.codehaus.groovy.ast.expr.ArgumentListExpression cannot be cast to org.codehaus.groovy.ast.expr.VariableExpression
В Groovy 1.7.x этот код работал как часы.
Что интересного в этом баге? Интересно в нем то, что он проявляется только в Groovy, установленном при помощи Windows Installer. Если же скачать ZIP-архив Groovy и распаковать его, то groovy.bat оттуда работает прекрасно и никаких ошибок не выдает.
То ли в инсталлятор запихали неправильную сборку Groovy, то ли имеет место более тонкий спецэффект. Пусть теперь разработчики разбираются. Баг GROOVY-4821.
Дополнение от 2011-05-11. Причиной проблемы был
Groovy++, который по умолчанию ставится
инсталлятором. Про поддержку множественного присваивания в Groovy++
есть баг, но починка
его в ближайшие планы разработчиков явно не входит. Решение — переустановить Groovy без Groovy++ или просто снести groovypp*.jar
из $GROOVY_HOME/lib
.