Первый релиз развиваемого компанией Red Hat языка программирования Ceylon
Представлен первый релиз языка программирования Ceylon (Milestone 1), развиваемого компанией Red Hat как языка общего назначения, претендующего на роль замены Java. В состав выпуска входят компилятор, runtime-компоненты и набор стандартных модулей. Через несколько дней планируется выпустить интегрированную среду разработки Ceylon IDE, построенную на базе Eclipse. Код связанных с языком компонентов распространяется под лицензией GPLv2, а код среды разработки под лицензией EPL. Бинарные пакеты можно загрузить в форматах deb и rpm.
Первый релиз "Milestone 1" имеет статус экспериментального выпуска, на базе которого, после публикации ещё четырёх Milestone-выпусков, будет подготовлен стабильный релиз Ceylon 1.0. В первом выпуске реализована поддержка выражений, базовых возможностей языка, процедурного и объектно-ориентированного кода. В следующих экспериментальных выпусках появятся средства функционального программирования, поддержка смешанного наследования, вложенных классов, псевдонимов типов, конструкции switch/case, перечисляемых типов, аннотаций, мета-модели типов, перехвата методов, атрибутов и классов.
Создатели Ceylon поставили перед собой цель избавления от устаревших концепций и подходов, которые мешают дальнейшей эволюции языка Java и достижению более высокого уровня эффективности. Кроме реализации лучших возможностей Java, в Ceylon заимствованы некоторые дополнительные конструкции из языков Smalltalk, Python и ML. Написанные на языке Ceylon программы и модули могут выполняться в стандартной виртуальной машине Java (JVM). Поддерживается бесшовная интеграция с другими языками, базирующимися на JVM, например, модули на языке Ceylon можно использовать в программах на Java и наоборот. Язык использует статическую типизацию и спроектирован с оглядкой на простоту изучения, лёгкость восприятия кода и разработку больших проектов, в которых участвует большое число программистов. Синтаксис Ceylon во многом напоминает Си, Java и C#.
Отмечается, что при помощи Ceylon значительно проще создавать фреймворки и библиотеки классов, а также естественно описывать древовидные структуры (в частности, формировать пользовательский интерфейс). В язык добавлены элементы, упрощающие написание кода, который можно использовать повторно в других проектах. Модули на языке Ceylon упаковываются в архивы .car и помещаются в специальные репозитории. В процессе выполнения приложения нужные модули загружаются сразу из внешнего или локального репозитория, не требуя предварительной установки. Язык поддерживает архитектуру модульной "peer-to-peer" загрузки классов, обладающую такими возможностями как учет требований приложения к версиям модулей и поддержку работы сразу с несколькими репозиториями модулей, как локальными, так и внешними (первый релиз поддерживает только локальные репозитории, поддержка внешнего репозитория modules.ceylon-lang.org появится в следующем выпуске).
Некоторые особенности Ceylon:
Статическая типизация (тип любого значения любого выражения может быть определён без исполнения программы), позволяющая выявлять ошибки на этапе компиляции, а не в процессе исполнения;
Отсутствие специальных типов, всё реализовано в виде объектов;
Именованные и опциональные параметры;
Nullable-типы (кроме значений базового типа, допускается использование состояний NULL);
Отсутствие необходимости явного указания геттеров/сеттеров (getter/setters);
Определение типов для локальных блоков (через ключевое слово "local");
Удобная организация работы с последовательностями (массивами);
Реализация функций высшего порядка, аргументом или возвращаемым результатом в которых выступают другие функции;
Использование для присвоения первоначальных значений (инициализации переменных) оператора ":=";
Новый синтаксис интерполяции строк;
Новые типы: Natural, Numeric и т.п.
Классы, методы и атрибуты выглядят одинаково;
Использование для определения существующих языковых концепций новых ключевых слов: shared, satisfies, assign, variable, local;
Упрощение уровней public, protected, private access, visibility;
Определение inline-функций в стиле Smalltalk.