Jump to content

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

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

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

К важным особенностям Цейлона относятся: [9]

Название «Цейлон» является косвенной ссылкой на Яву, поскольку Ява и Шри-Ланка , ранее известные как Цейлон, являются островами, известными выращиванием и экспортом кофе и чая .

В августе 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 (is Integer input) {
        print("Got the integer ``input``");
    } else {
        print("Got the string '``input``'");
    }
}

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

shared void integerOrString(Integer|String input) {
    Integer added = input + 6; // illegal; the + operator is not defined on Integer|String

    if (is Integer input) {
        Integer added = input + 6; // legal; input is now known to be an Integer
        print("Got the integer ``input``");
    } else {
        print("Got the string '``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<Element&Object> removeNulls<Element>(Iterable<Element> stream);

Когда removeNulls вызывается с потоком Integer|Null элементов, результатом будет поток <Integer|Null> & Object элементы, что упрощает Integer.

Функции [ править ]

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

// A top-level higher-order function using block syntax (not associated with any user-created classes)
String process(String text, String transformString(String toChange)) {
    return transformString(text);
}

// A top-level function calling String.reverse in expression form.
String reverse(String text) => text.reversed;

// A function reference to String.reversed but mostly equivalent to the function above.
String(String) reverseFunctionReference = String.reversed;

// An example where the top-level function above is provided as an argument to the higher-order function above
String reversed1 = process("one", reverse);

// An example where an anonymous function - (text) => text+text - is provided to the higher-order function above. 
String reversed2 = process("one", (text) => text+text);

Перечислимые типы [ править ]

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

// Traditional syntax for enumerated type, in this case, limiting the instances to three objects(for this purpose: Singletons)
abstract class Vehicle(shared String name) of plane | train | automobile {}

object plane extends Vehicle("plane") {}
object train extends Vehicle("train") {}
object automobile extends Vehicle("automobile") {}
// Compile error: type is not a subtype of any case of enumerated supertype: 'boat' inherits 'Vehicle'
//object boat extends Vehicle("boat") {}

// New (as of Ceylon 1.2.0) constructor-based syntax
class Vehicle of plane | train | automobile {
    String name;

    abstract new named(String pName) {
        name = pName;
    }

    shared new plane extends named("plane") {}
    shared new train extends named("train") {}
    shared new automobile extends named("automobile") {}
    // Compile error: value constructor does not occur in of clause of non-abstract enumerated class: 'boat' is not listed in the of clause of 'Vehicle'
    //shared new boat extends named("boat") {}
}

Вывод типа [ править ]

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

Integer i = 3;
value i = 3;

Integer add(Integer i1, Integer i2) {
    return i1 + i2;
}
function add(Integer i1, Integer i2) {
    return i1 + i2;
}

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

Точка входа с именами [ править ]

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

/* The classic Hello World program */
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.

См. также [ править ]

Ссылки [ править ]

  1. ^ Кинг, Гэвин. «Цейлонский язык: §4.1 Структура единицы компиляции» . Проверено 4 декабря 2015 г. Единица компиляции представляет собой текстовый файл с расширением имени файла. .ceylon.
  2. ^ «Часто задаваемые вопросы: Что такое Цейлон?» . Проверено 4 декабря 2015 г. Ceylon — новый язык программирования, на который глубоко повлияла Java.
  3. ^ «Цейлон/пользователь — Гиттер» . Проверено 4 декабря 2015 г.
  4. ^ «Цейлон/пользователь — Гиттер» . Проверено 4 декабря 2015 г.
  5. ^ «10 лучших функций цейлонского языка, которые Java хотела бы иметь» . Проверено 29 ноября 2019 г.
  6. ^ «Цейлон 1.0 бета» . Проверено 26 сентября 2013 г.
  7. ^ «Проект Цейлон – Red Hat создает замену Java» . Регистр . 13 апреля 2011 г. Проверено 27 ноября 2011 г.
  8. ^ Кинг, Гэвин (10 января 2012 г.). «Принципы, которыми руководствуется этот проект» . Проверено 4 декабря 2015 г.
  9. ^ «Часто задаваемые вопросы о языковом дизайне: цели» . Проверено 4 декабря 2015 г.
  10. ^ Фестал, Дэвид (10 октября 2014 г.). «Пишите на Цейлоне, развертывайте как OSGI, используйте в Java EE» . Проверено 4 декабря 2015 г.
  11. ^ «Репозитории Maven» . Проверено 4 декабря 2015 г.
  12. ^ «Особенности Ceylon IDE» . Проверено 4 декабря 2015 г.
  13. ^ «Цейлон / Цейлон» . GitHub, Inc. 25 мая 2020 г. Архивировано из оригинала 03 октября 2023 г. Проверено 22 января 2024 г.
  14. ^ «Обзор прекращения действия Eclipse Ceylon™» . Фонд Эклипс. 05.04.2023. Архивировано из оригинала 23 апреля 2023 г. Проверено 23 апреля 2023 г.
  15. ^ Кинг, Гэвин. «Цейлон: часто задаваемые вопросы по языковому дизайну» .
  16. ^ Кинг, Гэвин. «Цейлонский язык: §1.4.3 Безопасность во время компиляции для нулевых значений и чувствительная к потоку типизация» . Проверено 4 декабря 2015 г.
  17. ^ Кинг, Гэвин. «Цейлонский язык: 4.7 функций» . Проверено 5 декабря 2015 г.
  18. ^ Кинг, Гэвин. «Цейлонский язык: 4.5.8 Перечисленные классы» . Проверено 6 декабря 2015 г.
  19. ^ Кинг, Гэвин. «Цейлонский язык: §3.2.9 Вывод типа» . Проверено 4 декабря 2015 г.
  20. ^ https://ceylon-lang.org/download-archive/ Цейлон: скачать предыдущие версии Цейлона.
  21. ^ «Цейлон: Лицензии» . Проверено 4 декабря 2015 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4c14a8844b5961f90174a65ecb0c1c9a__1717844100
URL1:https://arc.ask3.ru/arc/aa/4c/9a/4c14a8844b5961f90174a65ecb0c1c9a.html
Заголовок, (Title) документа по адресу, URL1:
Ceylon (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)