Экстенд
Парадигма | Объектно-ориентированный , императивный , функциональный |
---|---|
Разработано | Свен Эффтинге, Себастьян Зарнеков |
Разработчик | печатная лиса |
Впервые появился | 2011 |
Стабильная версия | 2.25.0
/ 2 марта 2021 г [1] |
Дисциплина набора текста | Статический , сильный , предполагаемый |
Платформа | Виртуальная машина Java |
ТЫ | Кросс-платформенный |
Лицензия | Публичная лицензия Eclipse |
Веб-сайт | затмение |
Под влиянием | |
Java , Scala , Groovy , Smalltalk , Xpand |
Xtend — это общего назначения язык программирования высокого уровня для виртуальной машины Java . Синтаксически и семантически Xtend уходит корнями в язык программирования Java, но фокусируется на более кратком синтаксисе и некоторых дополнительных функциях, таких как вывод типа , методы расширения и перегрузка операторов . Будучи в первую очередь объектно-ориентированным языком, он также объединяет функции, известные из функционального программирования , например лямбда-выражения . Xtend статически типизирован и использует Java систему типов без изменений. Он скомпилирован в код Java и, таким образом, легко интегрируется со всеми существующими библиотеками Java.
Язык Xtend и его IDE разработаны как проект на Eclipse.org. [2] и участвует в ежегодном выпуске релизов Eclipse. Код имеет открытый исходный код под лицензией Eclipse Public License . Тем не менее, язык можно скомпилировать и запустить независимо от платформы Eclipse .
История
[ редактировать ]Xtend произошел от Xtext , технологии, используемой для определения языка и редактора. Xtend был впервые выпущен как часть Xtext в версии Eclipse Indigo. [3] в июне 2011 года. С момента выпуска Eclipse Juno [4] (Июнь 2012 г., Xtend версия 2.3) Xtend стал самостоятельным проектом.
Описанный здесь язык Xtend не следует путать со старым языком с таким же названием в Xpand. [5] проект. Первоначально Xtend назывался Xtend2 для лучшего отличия. Букву «2» вскоре убрали для простоты. Xtend со своими шаблонными выражениями задуман как замена всей технологии Xpand.
Философия
[ редактировать ]Java — один из самых популярных языков программирования с обширной экосистемой библиотек и инструментов. Тем не менее, некоторые считают его синтаксис многословным, а некоторые понятия отсутствуют и добавляются лишь медленно. Xtend пытается получить лучшее от Java , но уменьшить синтаксический шум и добавить новые функции, позволяющие сделать код короче и лучше читаемым.
Чтобы облегчить обучение разработчикам Java , синтаксис Xtend близок к Java синтаксису . Xtend поддерживает максимальную совместимость с Java за счет компиляции кода Java и использования Java системы типов . Код Java и код Xtend можно по желанию смешивать внутри одного проекта.
Используя комбинацию лямбда-выражений и методов расширения , язык можно расширять посредством библиотек, т.е. без изменения самого языка. Небольшая стандартная библиотека широко использует это.
Xtend IDE на базе Eclipse предлагает подсветку синтаксиса, завершение кода, рефакторинг, навигацию и отладку. Он интегрируется с набором инструментов разработки Java Eclipse. [6]
Семантика
[ редактировать ]Xtend напоминает Java во многом . Вот пример файла Xtend:
package sample
import java.util.List
class Greeter {
def greetThem(List<String> names) {
for(name: names) {
println(name.sayHello)
}
}
def sayHello(String name) {
'Hello ' + name + '!'
}
}
Xtend обеспечивает вывод типа , т.е. тип name
а типы возвращаемых значений методов можно вывести из контекста. Классы и методы public
по умолчанию поля private
. Точки с запятой необязательны.
В примере также показан метод sayHello
вызывается как метод расширения , т.е. как функция его первого аргумента. Методы расширения также могут предоставляться другими классами или экземплярами.
Вместо использования императивного цикла for можно использовать лямбда-выражение функционального стиля в квадратных скобках и вызывать функцию высшего порядка. forEach
в синтаксисе расширения в списке:
def greetThem(List<String> names) {
names.forEach [ println(sayHello) ]
}
Обратите внимание, что параметр лямбды, если он не указан, называется it
, который можно пропустить, например this
на Яве. Его тип определяется как строка. Лямбда-выражения также автоматически приводятся к интерфейсам с одним методом, так что их можно передавать, например, как java.lang.Comparable
.
Выражения шаблона представляют собой многострочные строки в тройных кавычках с интерполированными значениями во французских кавычках . В приведенном выше примере можно было бы написать
def sayHello(String name) '''
Hello «name» !
'''
Xtend предлагает интеллектуальное управление пробелами — приведенный выше текст не будет иметь отступов при выводе, что соответствует требованиям генерации кода.
Дополнительные возможности языка включают мультиметоды , мощное выражение переключателя и перегрузку операторов с помощью библиотечных методов.
Ссылки
[ редактировать ]- ^ «Xtend — Примечания к выпуску» . eclipse.org . Проверено 5 апреля 2021 г.
- ^ Свен Эффтинге. «Официальная домашняя страница Xtend» . Eclipse.org . Проверено 14 сентября 2013 г.
- ^ «Релиз Eclipse Indigo» . Wiki.eclipse.org. 30 марта 2011 г. Проверено 14 сентября 2013 г.
- ^ «Выпуск Eclipse Juno» . Wiki.eclipse.org. 17 марта 2012 г. Проверено 14 сентября 2013 г.
- ^ «Xpand» . Wiki.eclipse.org. 04.06.2013 . Проверено 14 сентября 2013 г.
- ^ «ДжДТ» . Eclipse.org . Проверено 14 сентября 2013 г.
Библиография
[ редактировать ]- Лоренцо Беттини, Реализация предметно-ориентированных языков с помощью Xtext и Xtend - второе издание, Packt Publishing, 2016 г.
Внешние ссылки
[ редактировать ]- Свен Эффтинге, Себастьян Зарнеков, Расширение Java. Архивировано 3 августа 2018 г. в Wayback Machine , журнал Pragmatic Programmer Magazine, декабрь 2011 г.
- Алекс Блюитт: Xtend расширяет Java , интервью со Свеном Эффтингом, InfoQ, июнь 2012 г.