Цейлон (язык программирования) - Ceylon (programming language)
Эта статья слишком полагается на Рекомендации к основные источники.Январь 2017 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | Объектно-ориентированный |
---|---|
Разработано | Гэвин Кинг |
Разработчик | Фонд Затмения |
Впервые появился | 2011 |
Стабильный выпуск | 1.3.3 / 21 августа 2017 г. |
Печатная дисциплина | Статичный, сильный, безопасный |
Платформа | Виртуальная машина Java, JavaScript |
Лицензия | Лицензия Apache 2.0 |
Расширения имени файла | .ceylon[1] |
Интернет сайт | цейлонский язык |
Под влиянием | |
Ява,[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.
Смотрите также
- Dart (язык программирования), имеет собственную виртуальную машину, компилируется в JS, система типов не очень строгая, поддерживает миксины
- Fantom (язык программирования), компилируется в JVM, система типов не очень строгая, поддерживает миксины
Рекомендации
- ^ Король, Гэвин. "Цейлонский язык: §4.1 Структура модуля компиляции". Получено 2015-12-04.
А блок компиляции текстовый файл с расширением имени файла
.ceylon
. - ^ «Часто задаваемые вопросы: что такое Цейлон?». Получено 2015-12-04.
Ceylon - это новый язык программирования, на который сильно повлияла Java.
- ^ "ceylon / пользователь - Gitter". Получено 2015-12-04.
- ^ "ceylon / пользователь - Gitter". Получено 2015-12-04.
- ^ «10 лучших особенностей языка Цейлона, которые Java хотела бы иметь». Получено 2019-11-29.
- ^ «Цейлон 1.0 бета». Получено 2013-09-26.
- ^ «Проект Цейлон - Red Hat создает замену Java». Реестр. 2011-04-13. Получено 2011-11-27.
- ^ Кинг, Гэвин (2012-01-10). «Принципы, которыми руководствуется этот проект». Получено 2015-12-04.
- ^ «Часто задаваемые вопросы о языковом дизайне: цели». Получено 2015-12-04.
- ^ Фестал, Дэвид (2014-10-10). «Напишите на Цейлоне, разверните как OSGI, используйте в Java EE». Получено 2015-12-04.
- ^ "Репозитории Maven". Получено 2015-12-04.
- ^ «Особенности Ceylon IDE». Получено 2015-12-04.
- ^ Король, Гэвин. «Цейлон: часто задаваемые вопросы о языковом дизайне».
- ^ Король, Гэвин. "Цейлонский язык: §1.4.3 Безопасность во время компиляции для значений NULL и типизации с учетом потока". Получено 2015-12-04.
- ^ Король, Гэвин. «Цейлонский язык: 4.7 функций». Получено 5 декабря 2015.
- ^ Король, Гэвин. «Цейлонский язык: 4.5.8 Нумерованные классы». Получено 6 декабря 2015.
- ^ Король, Гэвин. "Цейлонский язык: вывод типа §3.2.9". Получено 2015-12-04.
- ^ https://ceylon-lang.org/download-archive/ Цейлон: Загрузить предыдущие версии Цейлон
- ^ «Цейлон: лицензии». Получено 2015-12-04.