Xtend — это новый язык, предназначенный для разработчиков Java, который компилируется в код Java. Это хорошая идея? Как он вписывается в существующий ландшафт языков программирования?
Как раз в тот момент, когда вы подумали, что никто в здравом уме не запустит еще один громкий язык для добавления в Go, Dart, Kotlin, Ceylon, не говоря уже о более известных новых языках, таких как CoffeeScript, Clojure, Scala и так далее, фонд Eclipse стремится удивить. Xtend-очень странная идея и совсем не то, что вы могли бы ожидать. Это Java-подобный язык, но, согласно рекламе, он предназначен не для замены Java, а для его улучшения. Он предназначен для того, чтобы быть,
Язык, созданный для разработчиков Java
но что это значит?
На первый взгляд кажется, что это Java с некоторыми дополнительными битами. Он компилируется в код Java. Да, вы правильно расслышали — он производит читаемый человеком Java, а не машинный исполняемый байт-код. Предполагается, что это означает, что вы можете использовать свои знания Java, чтобы войти и отредактировать скомпилированный исходный код. Вам не нужно долго и упорно думать, чтобы понять, что это не очень хорошая идея. Машинный код редко легко читается, и его изменение-не самый интересный способ скоротать время. Это говорит о том, что Xtend поставляется с хорошей поддержкой Eclipse.
Интересной новостью является то, что он был реализован с использованием системы Xtext, инструмента, позволяющего легко создавать доменные языки. В этом свете Xtend-действительно впечатляющая демонстрация того, насколько мощным является Xtext. В качестве рекламы для Xtext он выигрывает мгновенно.
Детали языка указывают на то, что он начинается с Java, с аналогичным синтаксисом и идентичной системой статических типов, и он использует JDK в качестве своей библиотеки — учитывая, что он компилируется в Java, любой другой выбор был бы трудным. Одна большая разница в том, что он делает только классы. Это правильно, никаких интерфейсов, никаких перечислений и никаких типов аннотаций.
Дополнения к Java-подобному поведению включают автоматический вывод типов, что означает, что, хотя язык статически типизирован, вам в основном вообще не нужно указывать тип. Например, оба:
val word=»Привет»
и
строковое слово val=»Привет»
приемлемы.
Еще одним желанным обновлением Java является автоматизация геттеров и сеттеров. Например, если вы пишете:
person.name
тогда это то же самое, что и
person.getName
и
person.name=»майк»
это то же самое, что
person.setName(«майк»)
Есть несколько других синтаксических вариаций, но как насчет чего-то более семантического, чего-то, что действительно расширяет Java? Xtend имеет коллекцию модных новых функций, некоторые из которых будут добавлены в саму Java в следующей версии. Большие два — это методы закрытия и расширения. Закрытие в этом случае также означает анонимную функцию, а также функцию, захватывающую текущую область. Методы расширения используются для добавления методов во встроенные или другие закрытые классы, и они могут быть полезны.
Другие улучшения включают лучшее и менее подверженное ошибкам выражение переключения; диспетчеризацию методов, основанную на времени выполнения, а не на времени компиляции; тип; и некоторые причудливые средства для создания сложных отформатированных строк с шаблонными выражениями.
Без сомнения, есть и другие особенности Xtend, о которых я не упомянул, но если нет чего-то действительно большого, что скрывается, и я сомневаюсь в этом, вывод должен быть таким же. Использование переводчика для преобразования одного языка в хорошо известный и хорошо поддерживаемый язык имеет свои преимущества. Он также имеет недостатки, и, хотя инструменты для компиляции Xtend в Java выглядят хорошо, вам все равно придется работать на двух языках, если вы хотите воспользоваться преимуществами перевода.
Является ли Xtend лучше, чем Java? Ответ должен быть «да» в том смысле, что он очищает много «шума», все еще присутствующего в Java, и добавляет некоторые приятные функции — в частности, закрытие. Тем не менее, Java развивается, и если вы немного подождете, Java будет иметь закрытие и другие блестящие новые функции.
Таким образом, суть в том простом факте, что, вероятно, не стоит рисковать своим проектом для языка, который не имеет послужного списка и вполне может исчезнуть на следующей неделе.
Так что в целом, это хорошая попытка, но нет, спасибо.
Что касается Xtext как способа построения DSL — это действительно выглядит так, как будто заслуживает некоторого исследования.
Дополнительная информация:
Xtend
Xtext
Чтобы получать информацию о новых статьях на I Programmer, подпишитесь на RSS-канал, следуйте за нами в Google+, Twitter или Facebook или подпишитесь на нашу еженедельную рассылку