Введение
Язык программирования Apache Groovy — это объектно-ориентированный язык программирования для платформы Java, совместимый с синтаксисом Java. Это одновременно статический и динамический язык, обладающий возможностями, схожими с Python, Ruby и Smalltalk. Он может использоваться как язык программирования, так и скриптовый язык для платформы Java, компилируется в байт-код виртуальной машины Java (JVM) и беспрепятственно взаимодействует с другим кодом и библиотеками Java. Groovy использует синтаксис с фигурными скобками, аналогичный синтаксису Java. Groovy поддерживает замыкания, многострочные строки и выражения, внедряемые в строки. Значительная часть возможностей Groovy заключается в его AST-преобразованиях, запускаемых с помощью аннотаций. Groovy 1.0 был выпущен 2 января 2007 года, а Groovy 2.0 — в июле 2012 года. Начиная с версии 2, Groovy может компилироваться статически, обеспечивая вывод типов и производительность, близкую к производительности Java. Groovy 2.4 стал последним крупным релизом, спонсируемым Pivotal Software, поддержка которого завершилась в марте 2015 года. С тех пор Groovy изменил структуру управления, перейдя к Комитету по управлению проектами в Apache Software Foundation.
Apache Groovy is a Java syntax compatible object oriented programming language for the Java platform. It is both a static and dynamic language with features similar to those of Python, Ruby, and Smalltalk. It can be used as both a programming language and a scripting language for the Java Platform, is compiled to Java virtual machine (JVM) bytecode, and interoperates seamlessly with other Java code and libraries. Groovy uses a curly bracket syntax similar to Java's. Groovy supports closures, multiline strings, and expressions embedded in strings. Much of Groovy's power lies in its AST transformations, triggered through annotations. Groovy 1.0 was released on January 2, 2007, and Groovy 2.0 in July, 2012. Since version 2, Groovy can be compiled statically, offering type inference and performance near that of Java. Groovy 2.4 was the last major release under Pivotal Software's sponsorship which ended in March 2015. Groovy has since changed its governance structure to a Project Management Committee in the Apache Software Foundation.
История
Джеймс Стречан впервые рассказал о разработке Groovy в своем блоге в августе 2003 года. В марте 2004 года Groovy был представлен в JCP как JSR 241 и принят путем голосования. Несколько версий были выпущены в период с 2004 по 2006 год. После начала усилий по стандартизации в рамках Java Community Process (JCP), нумерация версий изменилась, и 2 января 2007 года была выпущена версия под названием "1.0". После различных бета-версий и релиз-кандидатов под номером 1.1, 7 декабря 2007 года Groovy 1.1 Final был выпущен и сразу же переименован в Groovy 1.5, чтобы отразить многочисленные изменения. В 2007 году Groovy получил первую премию на JAX 2007 Innovation Award. В 2008 году Grails, веб-фреймворк на Groovy, получил вторую премию на JAX 2008 Innovation Award. В ноябре 2008 года SpringSource приобрела компанию Groovy and Grails (G2One). В августе 2009 года VMware приобрела SpringSource. В апреле 2012 года, после восьми лет бездействия, Spec Lead изменил статус JSR 241 на "неактивный". 2 июля 2012 года был выпущен Groovy 2.0, который, помимо других новых функций, добавил статическую компиляцию и статическую проверку типов. Когда совместное предприятие Pivotal Software было выделено из корпораций EMC (EMC) и VMware в апреле 2013 года, Groovy и Grails вошли в его продуктовый портфель. Pivotal прекратил спонсировать Groovy и Grails с апреля 2015 года. 7 февраля 2020 года был выпущен Groovy 3.0. Версия 4.0 была выпущена 25 января 2022 года.
Особенности
Большинство корректных Java-файлов также являются корректными Groovy-файлами. Хотя эти два языка похожи, код на Groovy может быть более компактным, поскольку ему не требуются все элементы, необходимые Java. Это позволяет программистам на Java постепенно изучать Groovy, начиная со знакомого синтаксиса Java, прежде чем осваивать более специфичные идиомы программирования Groovy. Особенности Groovy, отсутствующие в Java, включают как статическую, так и динамическую типизацию (с использованием ключевого слова `def`), перегрузку операторов, встроенный синтаксис для списков и ассоциативных массивов (карт), встроенную поддержку регулярных выражений, полиморфную итерацию, интерполяцию строк, дополнительные вспомогательные методы и оператор безопасной навигации `?.` для автоматической проверки на null-указатели (например, `variable?.method` или `variable?.field`). Начиная с версии 2, Groovy также поддерживает модульность (возможность поставлять только необходимые JAR-файлы в соответствии с потребностями проекта, тем самым уменьшая размер библиотеки Groovy), проверку типов, статическую компиляцию, улучшения синтаксиса Project Coin, блоки многократного перехвата исключений и постоянное повышение производительности с использованием инструкции `invokedynamic`, представленной в Java 7. Groovy обеспечивает встроенную поддержку различных языков разметки, таких как XML и HTML, посредством синтаксиса встроенной объектной модели документа (DOM). Эта функция позволяет определять и манипулировать многими типами разнородных данных с использованием единого и лаконичного синтаксиса и методологии программирования. В отличие от Java, файл исходного кода Groovy может быть выполнен как (нескомпилированный) скрипт, если он содержит код вне определения какого-либо класса, если это класс с методом `main`, или если это `Runnable` или `GroovyTestCase`. Скрипт Groovy полностью разбирается, компилируется и генерируется перед выполнением (аналогично Python и Ruby). Это происходит незаметно для пользователя, и скомпилированная версия не сохраняется как артефакт процесса.
Функциональное программирование
Хотя Groovy в основном объектно-ориентированный язык, он также предоставляет возможности функционального программирования.