Цейлон (язык программирования) - Ceylon (programming language)

Цейлон
Цейлон (язык программирования) logo.png
ПарадигмаОбъектно-ориентированный
РазработаноГэвин Кинг
РазработчикФонд Затмения
Впервые появился2011; 9 лет назад (2011)
Стабильный выпуск
1.3.3 / 21 августа 2017 г.; 3 года назад (2017-08-21)
Печатная дисциплинаСтатичный, сильный, безопасный
ПлатформаВиртуальная машина Java, JavaScript
ЛицензияЛицензия Apache 2.0
Расширения имени файла.ceylon[1]
Интернет сайтцейлонский язык.org
Под влиянием
Ява,[2] Scala, Болтовня, ML,[3] Лисп,[4] Пока[5]

Цейлон был объектно-ориентированный, сильно статически типизированный язык программирования с упором на неизменность, сделано Красная шляпа. Цейлонские программы работают на Виртуальная машина Java (JVM) и может быть скомпилирован в JavaScript.[6][7]Дизайн языка ориентирован на читаемость исходного кода, предсказуемость, приспособляемость, модульность, и метапрограммируемость.[8]

Важные особенности Цейлона:[9]

  • Система типов, обеспечивающая нулевую безопасность и существование элементов списка во время компиляции
  • Регулярный синтаксис и семантика, избегание особых случаев и примитивно определенных конструкций в пользу синтаксический сахар
  • Поддержка общего программирования и метапрограммирования, с овеществленный дженерики
  • В язык встроена модульность, основанная на Модули JBoss, совместим с OSGi[10] и Maven[11]
  • мощные инструменты, включая IDE на основе Eclipse[12]

Название "Цейлон" косвенно отсылает к Яве, в этом Ява и Шри-Ланка острова, ранее известные как Цейлон, известны ростом и экспортом кофе и чай.

В августе 2017 года Цейлон был передан в дар Фонд Затмения.

Особенности языка

Цейлон находится под сильным влиянием Ява синтаксис, но добавляет много новых функций.

Система типов

Одним из самых новых аспектов Цейлона по сравнению с Java является его система типов. Цейлон отказывается от примитивных типов Java[13] и заниматься боксом в пользу системы типов, полностью состоящей из первоклассных объектов. Хотя в некоторых ситуациях это может вызвать накладные расходы на упаковку, это делает систему типов более единообразной.

Цейлон позволяет объединиться и типы пересечений аналогично Машинопись, Пока и Flow.

Типы союза, письменные А | Б, разрешите переменной иметь более одного типа. В следующем примере показана функция Ceylon, которая может принимать либо целое число или нить:

общий пустота integerOrString(Целое число|Нить Вход) {    если (является Целое число Вход) {        Распечатать("Получил целое число" input "");    } еще {        Распечатать("Получил строку '` `input``'");    }}

Типы перекрестков, письменные A&B, являются теоретической основой чувствительный к потоку ввод:

общий пустота integerOrString(Целое число|Нить Вход) {    Целое число добавлен = Вход + 6; // незаконно; оператор + не определен в Integer | String    если (является Целое число Вход) {        Целое число добавлен = Вход + 6; // законный; теперь известно, что ввод является целым числом        Распечатать("Получил целое число` input` ");    } еще {        Распечатать("Получил строку '` `input``'");    }}

Условие Целочисленный ввод сужает тип Вход к <Целое число | Строка> & Целое число,который распределяет к Целое и целое число | Строка и целое число, который, как Нить и Целое число являются непересекающимися типами, эквивалентно Целое и целое число | Ничего (Ничего является пустым нижним типом), что упрощается до Целое число.

Нулевая безопасность

Типы объединения и пересечения используются для обеспечения нулевой безопасности. Верхний тип иерархии типов Цейлона - это класс Что-либо, который имеет два подкласса: Объект, суперкласс всех нормальных классов и всех интерфейсов, и Ноль, с единственным экземпляром нольОбъект и Ноль являются непересекающимися типами, большинство обычных типов, таких как Целое число или же Список не допускают значения NULL; a обнуляемый тип это союз Целое | Нулевое, сокращенно Целое?.[14]

Типы пересечения могут использоваться для получения необязательного типа из возможно необязательного типа, такого как параметр типа. Например, подпись функции, удаляющей ноль элементы из потока значений могут быть:

Итерабельный<Элемент&Объект> removeNulls<Элемент>(Итерабельный<Элемент> транслировать);

Когда removeNulls называется потоком Целое | Нулевое элементов, результатом будет поток <Целое число | Нулевое> & Объект элементы, что упрощает Целое число.

Функции

Как и многие современные языки, Цейлон поддерживает функции первого класса и функции высшего порядка, включая типы функций и анонимные функции[15]

// Функция верхнего уровня высшего порядка, использующая синтаксис блока (не связанная ни с какими пользовательскими классами)Нить процесс(Нить текст, Нить transformString(Нить изменить)) {    возвращаться transformString(текст);}// Функция верхнего уровня, вызывающая String.reverse в форме выражения.Нить обеспечить регресс(Нить текст) => текст.перевернутый;// Ссылка на функцию String.reversed, но в основном эквивалентна функции выше.Нить(Нить) reverseFunctionReference = Нить.перевернутый;// Пример, в котором вышеприведенная функция верхнего уровня предоставляется в качестве аргумента вышеприведенной функции высшего порядкаНить перевернутый1 = процесс("один", обеспечить регресс);// Пример, где анонимная функция - (текст) => текст + текст - предоставляется вышестоящей функции высшего порядка. Нить обратный2 = процесс("один", (текст) => текст+текст);

Перечислимые типы

Подобно Java и многим другим языкам, и с аналогичным механизмом, как алгебраические типы, Цейлонские опоры перечислимые типы, иначе называемые перечислениями. Это реализовано на Цейлоне с помощью шаблона ограничения экземпляров абстрактного класса при объявлении ограниченным набором объектов (в данном случае экземплярами синглтонов). Другой способ реализовать этот шаблон - использовать новый конструктор в Ceylon 1.2, где объекты реализованы как объявления конструкторов с разными именами.[16]

// Традиционный синтаксис для перечислимого типа, в данном случае ограничение экземпляров тремя объектами (для этого: синглтоны)Абстрактные учебный класс Средство передвижения(общий Нить имя) из самолет | тренироваться | автомобиль {}объект самолет расширяет Средство передвижения("самолет") {}объект тренироваться расширяет Средство передвижения("тренироваться") {}объект автомобиль расширяет Средство передвижения("автомобиль") {}// Ошибка компиляции: тип не является подтипом ни в одном случае перечисляемого супертипа: 'лодка' наследует 'Транспортное средство'// объект лодка расширяет автомобиль ("лодка") {}// Новый (начиная с Ceylon 1.2.0) синтаксис на основе конструктораучебный класс Средство передвижения из самолет | тренироваться | автомобиль {    Нить имя;    Абстрактные новый названный(Нить pName) {        имя = pName;    }    общий новый самолет расширяет названный("самолет") {}    общий новый тренироваться расширяет названный("тренироваться") {}    общий новый автомобиль расширяет названный("автомобиль") {}    // Ошибка компиляции: конструктор значения не встречается в предложении of неабстрактного перечислимого класса: 'лодка' не указана в предложении 'Транспортное средство'    // общая новая лодка расширяется с именем ("лодка") {}}

Вывод типа

Цейлон строго и статически типизирован, но также поддерживает вывод типа. ценить ключевое слово используется для определения типа переменной, а функция ключевое слово используется для определения типа функции. Каждая из следующих двух пар определений эквивалентна:

Целое число я = 3;ценить я = 3;Целое число Добавить(Целое число i1, Целое число i2) {    возвращаться i1 + i2;}функция Добавить(Целое число i1, Целое число i2) {    возвращаться i1 + i2;}

Однако, чтобы сделать возможным однопроходный вывод типа, вывод типа разрешен только для объявлений не верхнего уровня и объявлений без общего доступа.[17]

Точка входа с именами

По умолчанию стартер (Цейлонский бег) запускает общую функцию run () модуля:

/ * Классическая программа Hello World * /общий пустота пробег() {    Распечатать("Привет, мир!");}

но любую другую разделяемую функцию без параметров можно использовать в качестве основного вызова программы с параметром --run, например:

ceylon run --compile = force --run hello default

Версии

Выпущены версии Ceylon:[18]

  • M1 0,1 «Ньютон» (20 декабря 2011 г.)
  • М2 0.2 "Минитель" (02.03.2012)
  • M3 0,3 "V2000" (21 июня 2012 г.)
  • M3.1 0.3.1 "V2000" (6 июля 2012 г.)
  • M4 0.4 "Аналитическая машина" (29 октября 2012 г.)
  • M5 0,5 «Неса Понг» (13 марта 2013 г.)
  • M6 0.6 "Virtual Boy" (23 сентября 2013 г.)
  • 1.0 бета "Virtual Boy" (24 сентября 2013 г.)
  • 1.0.0 «Нет больше мистера Славного Парня» (13 ноября 2013 г.)
  • 1.1.0 «Ultimate Ship The Second» (9 октября 2014 г.)
  • 1.2.0 «Серия неправдоподобных объяснений» (28 октября 2015 г.)
  • 1.2.1 «Необычный апокалипсис» (11 февраля 2016 г.)
  • 1.2.2 «Очаровательно, но иррационально» (11 марта 2016 г.)
  • 1.3.0 «Полное внутреннее отражение» (19 сентября 2016 г.)
  • 1.3.1 «Теперь мы попробуем сделать это по-своему» (22 ноября 2016 г.)
  • 1.3.2 "Толерантная улыбка" (2 марта 2017 г.)
  • 1.3.3 «Содержание может отличаться» (21 августа 2017 г.)

Лицензия

Все части Цейлона доступны как бесплатно программное обеспечение, в основном Лицензия Apache.[19] Часть исходного кода находится под лицензией LGPL.

Смотрите также

Рекомендации

  1. ^ Король, Гэвин. "Цейлонский язык: §4.1 Структура модуля компиляции". Получено 2015-12-04. А блок компиляции текстовый файл с расширением имени файла .ceylon.
  2. ^ «Часто задаваемые вопросы: что такое Цейлон?». Получено 2015-12-04. Ceylon - это новый язык программирования, на который сильно повлияла Java.
  3. ^ "ceylon / пользователь - Gitter". Получено 2015-12-04.
  4. ^ "ceylon / пользователь - Gitter". Получено 2015-12-04.
  5. ^ «10 лучших особенностей языка Цейлона, которые Java хотела бы иметь». Получено 2019-11-29.
  6. ^ «Цейлон 1.0 бета». Получено 2013-09-26.
  7. ^ «Проект Цейлон - Red Hat создает замену Java». Реестр. 2011-04-13. Получено 2011-11-27.
  8. ^ Кинг, Гэвин (2012-01-10). «Принципы, которыми руководствуется этот проект». Получено 2015-12-04.
  9. ^ «Часто задаваемые вопросы о языковом дизайне: цели». Получено 2015-12-04.
  10. ^ Фестал, Дэвид (2014-10-10). «Напишите на Цейлоне, разверните как OSGI, используйте в Java EE». Получено 2015-12-04.
  11. ^ "Репозитории Maven". Получено 2015-12-04.
  12. ^ «Особенности Ceylon IDE». Получено 2015-12-04.
  13. ^ Король, Гэвин. «Цейлон: часто задаваемые вопросы о языковом дизайне».
  14. ^ Король, Гэвин. "Цейлонский язык: §1.4.3 Безопасность во время компиляции для значений NULL и типизации с учетом потока". Получено 2015-12-04.
  15. ^ Король, Гэвин. «Цейлонский язык: 4.7 функций». Получено 5 декабря 2015.
  16. ^ Король, Гэвин. «Цейлонский язык: 4.5.8 Нумерованные классы». Получено 6 декабря 2015.
  17. ^ Король, Гэвин. "Цейлонский язык: вывод типа §3.2.9". Получено 2015-12-04.
  18. ^ https://ceylon-lang.org/download-archive/ Цейлон: Загрузить предыдущие версии Цейлон
  19. ^ «Цейлон: лицензии». Получено 2015-12-04.

внешняя ссылка