Компания Red Hat представила язык программирования Ceylon, призванный заменить Java
Гэвин Кинг (Gavin King), основатель проектов Hibernate и Seam, раскрыл на конференции QCon некоторые детали, связанные с проектом Ceylon, нацеленным на создание нового промышленного языка программирования и связанного с ним комплекта разработки (SDK), претендующих на роль замены Java. Проект уже два года развивается в компании Red Hat в условиях большой секретности. Информация о языке Ceylon изложена в двух презентациях: "Введение в Ceylon" и "Система типов Ceylon".
Судя по опубликованной информации, язык Ceylon нацелен в первую очередь на создание приложений для бизнеса. При проектировании Ceylon были учтены сильные и слабые стороны языка Java: Ceylon предназначен для выполнения в стандартной виртуальной машине JVM, использует статическую типизацию, поддерживает функции высшего порядка, спроектирован с оглядкой на простоту изучения и лёгкость восприятия кода.
Необходимость создания замены Java связана с тем, что несмотря на популярность языка, его надёжность и наличие огромного количества готовых библиотек классов, в Java накопилось достаточно много устаревших концепций и подходов, которые мешают дальнейшей эволюции языка и достижения того уровня эффективности, который можно наблюдать в таких языках, как Groovy, Python и C#.
В настоящее время уже проделана большая работа по становлению Ceylon: сформирован дизайн языка, ведётся работа по созданию готового к промышленному использованию компилятора и SDK. Тем не менее, до завершения разработки ещё очень далеко, например, не решены некоторые проблемы с организацией модульной структуры и интеграции с существующими Java-проектами и библиотеками. Предполагается, что раскрытие завесы тайны над языком Ceylon связано с тем, что Red Hat пытается найти партнёров для доведения разработки до конца. Как и другие проекты Red Hat, код Ceylon будет доступен в рамках свободной лицензии.
Некоторые особенности Ceylon:
Статическая типизация (тип любого значения любого выражения может быть определён без исполнения программы), позволяющая выявлять ошибки на этапе компиляции, а не в процессе исполнения;
Отсутствие специальных типов, всё реализовано в виде объектов;
Именованные и опциональные параметры;
Nullable-типы (кроме значений базового типа, допускается использование состояний NULL);
Отсутствие необходимости явного указания геттеров/сеттеров (getter/setters);
Определение типов для локальных блоков (через ключевое слово "local");
Удобная организация работы с последовательностями (массивами);
Реализация функций высшего порядка, аргументом или возвращаемым результатом в которых выступают другие функции;
Использование для присвоения значений оператора ":=";
Новый синтаксис интерполяции строк;
Новые типы: Natural, Numeric и т.п.
Классы, методы и атрибуты выглядят одинаково;
Использование для определения существующих языковых концепций новых ключевых слов: shared, satisfies, assign, variable, local;
Упрощение уровней public, protected, private access, visibility;
Определение inline-функций в стиле Smalltalk.