Цейлон (язык программирования)
![]() | |
Парадигма | Объектно-ориентированный |
---|---|
Разработано | Гэвин Кинг |
Разработчик | Фонд Затмения |
Впервые появился | 2011 год |
Стабильная версия | 1.3.3
/ 21 августа 2017 г |
Дисциплина набора текста | Статический , сильный , безопасный |
Платформа | Виртуальная машина Java , JavaScript |
Лицензия | Лицензия Апач 2.0 |
Расширения имен файлов | .цейлон [1] |
Веб-сайт | только Цейлон |
Под влиянием | |
Джава , [2] Скала , Смоллток , ML , [3] Лисп , [4] Пока [5] |
Ceylon — объектно-ориентированный , строго статически типизированный язык программирования с упором на неизменяемость , созданный Red Hat . Цейлонские программы работают на виртуальной машине Java (JVM) и могут быть скомпилированы в JavaScript . [6] [7] При разработке языка основное внимание уделяется читаемости исходного кода , предсказуемости , удобству использования инструментов , модульности и метапрограммируемости . [8]
К важным особенностям Цейлона относятся: [9]
- Система типов, обеспечивающая нулевую безопасность и существование элемента списка во время компиляции.
- Регулярный синтаксис и семантика, избегание особых случаев и примитивно определенных конструкций в пользу синтаксического сахара.
- Поддержка универсального программирования и метапрограммирования с использованием универсальных шаблонов.
- Модульность, встроенная в язык, на основе модулей JBoss , совместимых с OSGi. [10] и Мейвен [11]
- мощные инструменты, включая IDE на базе Eclipse [12]
Название «Цейлон» является косвенной ссылкой на Яву, поскольку Ява и Шри-Ланка , ранее известные как Цейлон, являются островами, известными выращиванием и экспортом кофе и чая .
В августе 2017 года Цейлон был передан в дар фонду Eclipse Foundation . Развитие замедлилось и окончательно остановилось в 2020 году. [13] В апреле 2023 года Eclipse Foundation заявила о прекращении перехода. [14]
Языковые особенности [ править ]
Ceylon находится под сильным влиянием синтаксиса Java , но добавляет много новых функций.
Типовая система [ править ]
Одним из самых новых аспектов Ceylon по сравнению с Java является его система типов . Цейлон отказывается от примитивных типов Java [15] и бокс в пользу системы типов, полностью состоящей из первоклассных объектов. Хотя в некоторых ситуациях это может привести к накладным расходам на упаковку, это делает систему типов более единообразной.
Ceylon допускает типы объединения и пересечения , аналогично TypeScript , Whiley и Flow, которые, по сути, заимствовали идею у Ceylon.
Типы объединений, написанные A|B
, позволяет переменной иметь более одного типа. В следующем примере показана функция Ceylon, которая может принимать целое число или строку :
Shared void IntegerOrString ( Integer | String input ) {
if ( является целочисленным вводом ) {
print ( "Получено целое число ``input``" );
} else {
print ( "Получена строка '``input`''" );
}
}
Типы пересечений, написанные A&B
, являются теоретической основой чувствительной к потоку типизации :
общий void IntegerOrString ( Целое | Строковый ввод ) {
целое число Добавлено = ввод + 6 ; // незаконно; оператор + не определен для Integer|String
if ( is Integer input ) {
Integer добавлен = input + 6 ; // законно; теперь известно, что ввод представляет собой целочисленную
печать ( «Получено целое число ``input``» );
} else {
print ( "Получена строка '``input`''" );
}
}
Состояние is Integer input
сужает тип input
к <Integer|String> & Integer
,
который распределяется по Integer&Integer | String&Integer
,
который, как String
и Integer
являются непересекающимися типами, что эквивалентно Integer&Integer | Nothing
( Nothing
это тип пустого дна),
что упрощается до просто Integer
.
Нулевая безопасность [ править ]
Типы объединения и пересечения используются для обеспечения нулевой безопасности .
Верхним типом иерархии типов Цейлона является класс Anything
,
который имеет два подкласса: Object
, суперкласс всех обычных классов и всех интерфейсов, и Null
, с единственным экземпляром null
.
С Object
и Null
являются непересекающимися типами, большинство обычных типов, таких как Integer
или List<String>
не являются обнуляемыми;
тип , допускающий значение NULL, — это объединение Integer|Null
, сокращенно Integer?
. [16]
Типы пересечений можно использовать для получения необязательного типа из возможно необязательного типа, например параметра типа. Например, сигнатура функции, удаляющей null
элементами из потока значений могут быть:
Iterable < Элемент и объект > RemoveNulls < Элемент > ( Итерируемый < Элемент > поток );
Когда removeNulls
вызывается с потоком Integer|Null
элементов, результатом будет поток <Integer|Null> & Object
элементы, что упрощает Integer
.
Функции [ править ]
Как и многие современные языки, Ceylon поддерживает функции первого класса и функции более высокого порядка , включая типы функций и анонимные функции. [17]
// Функция высшего порядка верхнего уровня, использующая блочный синтаксис (не связанная ни с какими классами, созданными пользователем)
String Process ( String text , String TransformString ( String toChange )) {
return TransformString ( Text );
}
// Функция верхнего уровня, вызывающая String.reverse в форме выражения.
строка Обратная ( строка текстовая ) => текст . перевернутый ;
// Ссылка на функцию String.reversed, но в основном эквивалентная функции выше.
Строка ( Строка ) обратнаяФункцияСсылка = Строка . перевернутый ;
// Пример, где функция верхнего уровня, указанная выше, предоставляется в качестве аргумента функции более высокого порядка, указанной выше
String Reverse1 = Process ( "one" , Reverse );
// Пример, в котором анонимная функция - (text) => text+text - передается функции более высокого порядка, указанной выше.
Строка перевернутая2 = процесс ( «один» , ( текст ) => текст + текст );
Перечислимые типы [ править ]
Подобно Java и многим другим языкам, а также с механизмом, аналогичным алгебраическим типам , Ceylon поддерживает перечислимые типы , также известные как перечисления. Это реализовано на Ceylon с помощью шаблона ограничения экземпляров абстрактного класса при объявлении ограниченным набором объектов (в данном случае одноэлементными экземплярами). Другой способ реализовать этот шаблон — новая функция конструктора в Ceylon 1.2, где объекты реализованы как объявления конструкторов с разными именами. [18]
// Традиционный синтаксис для перечислимого типа, в данном случае ограничение экземпляров тремя объектами (для этой цели: Singletons
абстрактный класс Vehicle ( общее строки имя ) плоскости | ) поезд | автомобиль {}
объект plane расширяет Транспортное средство ( "самолет" ) {}
объект поезд расширяет Транспортное средство ( "поезд" ) {}
объект автомобиль расширяет Транспортное средство ( "автомобиль" ) {}
// Ошибка компиляции: тип не является подтипом ни в одном случае перечислимый супертип: 'boat' наследует 'Vehicle'
//object Boat расширяет Vehicle("boat") {}
на основе конструктора
// Новый (начиная с Ceylon 1.2.0) синтаксический класс Vehicle of plane | поезд | автомобиль {
Строковое имя ;
абстрактное новое имя ( String pName ) {
name = pName ;
}
общий новый самолет расширяется с именем ( "самолет" ) {}
общий новый поезд расширяется с именем ( "поезд" ) {}
общий новый автомобиль расширяется с именем ( "автомобиль" ) {}
// Ошибка компиляции: конструктор значения не встречается в предложении неабстрактного перечислимого класса: «лодка» не указана в пункте «Транспортное средство»
// общая новая лодка расширяется с именем («лодка») {}
}
Вывод типа [ править ]
Ceylon строго и статически типизирован, но также поддерживает вывод типа .
value
Ключевое слово используется для определения типа переменной,
и function
Ключевое слово используется для определения типа функции.
Следующие две пары определений эквивалентны:
Целое число я = 3 ;
значение я = 3 ;
Целое число add ( Целое число i1 , Целое число i2 ) {
return i1 + i2 ;
}
Функция add ( Целое число i1 , Целое число i2 ) {
return i1 + i2 ;
}
Однако, чтобы сделать возможным однопроходный вывод типа, вывод типа разрешен только для объявлений не верхнего уровня и неразделяемых объявлений. [19]
Точка входа с именами [ править ]
По умолчанию стартер ( ceylon run
) запускает общую функцию run() модуля:
/* Классическая программа Hello World */
shared void run () {
print ( "Hello, World!" );
}
но любая другая общая функция без параметров может использоваться в качестве основного вызова программы с параметром запуска , например:
ceylon run --compile=force --run hello default
Версии [ править ]
Выпущены версии Ceylon: [20]
- М1 0,1 «Ньютон» (20 декабря 2011 г.)
- М2 0.2 «Минитель» (2 марта 2012 г.)
- М3 0,3 «В2000» (21 июня 2012 г.)
- M3.1 0.3.1 "V2000" (6 июля 2012 г.)
- M4 0.4 «Аналитическая машина» (29 октября 2012 г.)
- M5 0.5 «Неса Понг» (13 марта 2013 г.)
- M6 0.6 «Виртуальный мальчик» (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 «Улыбайтесь толерантно» (02 марта 2017 г.)
- 1.3.3 «Содержимое может отличаться» (21 августа 2017 г.)
Лицензия [ править ]
Все части Ceylon доступны в виде бесплатного программного обеспечения , в основном по лицензии Apache . [21] Часть исходного кода лицензирована по лицензии LGPL.
См. также [ править ]
- Dart (язык программирования) , имеет собственную виртуальную машину, компилируется в JS, система типов не очень строгая, поддерживает миксины
- Fantom (язык программирования) , компилируется в JVM, не очень строгая система типов, поддерживает миксины
Ссылки [ править ]
- ^ Кинг, Гэвин. «Цейлонский язык: §4.1 Структура единицы компиляции» . Проверено 4 декабря 2015 г.
Единица компиляции представляет собой текстовый файл с расширением имени файла.
.ceylon
. - ^ «Часто задаваемые вопросы: Что такое Цейлон?» . Проверено 4 декабря 2015 г.
Ceylon — новый язык программирования, на который глубоко повлияла Java.
- ^ «Цейлон/пользователь — Гиттер» . Проверено 4 декабря 2015 г.
- ^ «Цейлон/пользователь — Гиттер» . Проверено 4 декабря 2015 г.
- ^ «10 лучших функций цейлонского языка, которые Java хотела бы иметь» . Проверено 29 ноября 2019 г.
- ^ «Цейлон 1.0 бета» . Проверено 26 сентября 2013 г.
- ^ «Проект Цейлон – Red Hat создает замену Java» . Регистр . 13 апреля 2011 г. Проверено 27 ноября 2011 г.
- ^ Кинг, Гэвин (10 января 2012 г.). «Принципы, которыми руководствуется этот проект» . Проверено 4 декабря 2015 г.
- ^ «Часто задаваемые вопросы о языковом дизайне: цели» . Проверено 4 декабря 2015 г.
- ^ Фестал, Дэвид (10 октября 2014 г.). «Пишите на Цейлоне, развертывайте как OSGI, используйте в Java EE» . Проверено 4 декабря 2015 г.
- ^ «Репозитории Maven» . Проверено 4 декабря 2015 г.
- ^ «Особенности Ceylon IDE» . Проверено 4 декабря 2015 г.
- ^ «Цейлон / Цейлон» . GitHub, Inc. 25 мая 2020 г. Архивировано из оригинала 3 октября 2023 г. Проверено 22 января 2024 г.
- ^ «Обзор прекращения действия Eclipse Ceylon™» . Фонд Эклипс. 05.04.2023. Архивировано из оригинала 23 апреля 2023 г. Проверено 23 апреля 2023 г.
- ^ Кинг, Гэвин. «Цейлон: часто задаваемые вопросы по языковому дизайну» .
- ^ Кинг, Гэвин. «Цейлонский язык: §1.4.3 Безопасность во время компиляции для нулевых значений и чувствительная к потоку типизация» . Проверено 4 декабря 2015 г.
- ^ Кинг, Гэвин. «Цейлонский язык: 4.7 функций» . Проверено 5 декабря 2015 г.
- ^ Кинг, Гэвин. «Цейлонский язык: 4.5.8 Перечисленные классы» . Проверено 6 декабря 2015 г.
- ^ Кинг, Гэвин. «Цейлонский язык: §3.2.9 Вывод типа» . Проверено 4 декабря 2015 г.
- ^ https://ceylon-lang.org/download-archive/ Цейлон: скачать предыдущие версии Цейлона.
- ^ «Цейлон: Лицензии» . Проверено 4 декабря 2015 г.