Содержание


Язык программирования Ceylon: Часть 1. Общий обзор и основные функциональные возможности

Comments

В этой статье рассматривается небольшая библиотека libtask, обеспечивающая функционирование сопрограмм в приложениях, написанных на языке программирования C для Unix-подобных систем.

Этот цикл статей посвящён новому языку программирования Ceylon, представленному компанией Red Hat, Inc. В данной статье рассматриваются общие свойства и функциональные возможности языка Ceylon.

Язык программирования Ceylon представлен известной в мире ПО с открытым кодом компанией Red Hat, Inc. как "язык для создания больших программ в командах". В настоящий момент самой последней рабочей версией является версия 1.0.0, которую можно скачать здесь. Ceylon представляет собой программный продукт с лицензией open source, и все желающие могут без ограничений получить исходные коды на GitHub.

1. Общий обзор языка

Ceylon - язык программирования со статической типизацией, реализация которой в данном случае, по заверениям разработчиков, способна защитить от множества часто встречающихся ошибок при использовании других языков программирования (причём, ошибок как тИповых, так и типовЫх). Кроме привычного набора стандартных элементарных типов, в языке предлагаются типы union (впрочем, тоже уже ставшие стандартными де-факто), типы-пересечения (intersection types), функции высших порядков, смешанное наследование и перечисляемые типы.

Сразу следует отметить, что Ceylon представляет собой полнофункциональную программную платформу, тщательно спроектированную и разработанную, включающую в себя современный SDK. Ceylon работает как на виртуальных машинах Java, так и на виртуальных машинах JavaScript, тем самым, в определённом смысле, формируя соединительное звено между сервером и клиентом. Ceylon обеспечивает полную совместимость и взаимодействие с платформой Java и Java SDK. Код, написанный на Ceylon, работает на JVM, на Node.js или в web-браузере (кстати, исходный код можно проверять прямо в режиме online. Некоторые модули зависят от конкретной используемой платформы, но сам по себе язык совершенно одинаково ведёт себя и на виртуальных машинах Java, и на виртуальных машинах JavaScript.

Одним из наиболее важных свойств Ceylon является ярко выраженная модульность, присущая не только собственно языку, но и SDK, и прочим инструментальным средствам. Компилятор генерирует архивы модулей (module archives), которые в дальнейшем могут использоваться локально либо распространяются через репозиторий модулей Ceylon Herd.

На практике доказано, что при разработке крупных программных проектов на чтение и изучение чужого кода тратится не меньше (а то и больше) времени, чем на написание своего. Исходя из этого положения, в Ceylon наивысший приоритет отдан удобству чтения и восприятия кода человеком - аккуратный и понятный синтаксис, поддержка наглядных древовидных структур и немного синтаксического сахара (syntactic sugar), но только в тех случаях, где он действительно уместен. Вообще говоря, Ceylon решает проблемы сложности и запутанности кода с помощью ясности и очевидности конструкций языка, всячески избегая неявных (скрытых) функциональных возможностей, работающих непостижимым мистическим образом, и неоднозначных (следовательно, трудно объяснимых) граничных случаев. Компилятор соблюдает простые, интуитивно понятные правила и выдаёт осмысленные подробные сообщения об ошибках. Синтаксис Ceylon унаследован от языка C. Поэтому программисты на C/C++, Java и C# сразу почувствуют себя, как дома. Но в действительности, одной из целей/задач языка является обеспечение максимального удобства чтения для тех, кто не является Ceylon-программистом и пока ещё не изучил синтаксис.

Инструменты для работы с языком программирования не менее важны, чем собственно сам язык. В дистрибутивный комплект Ceylon входит полнофункциональный набор инструментов командной строки и полностью готовая к употреблению IDE на базе Eclipse с функциями поиска, рефакторинга, быстрого внесения изменений, автодополнения (автозавершения), отладки и многими другими возможностями.

2. С чего начать

Прежде всего следует отметить, что для полноценного освоения Ceylon требуется знание основ объектно-ориентированного программирования, статической типизации и хотя бы небольшой практический опыт в этих областях. Необходимо понимать основные концепции статической типизации, наследования, организации подтипов, параметризации типов (generics). Тем, кто ранее использовал на практике Java, C++ или C#, будет гораздо проще перейти к Ceylon.

В любом случае, начать следует с освоения инструментов командной строки для лучшего понимания организации файлов исходного кода, модулей и процесса компиляции. В дальнейшем предполагается, что программная платформа Ceylon установлена и готова к работе. Подробную информацию о том, как установить и подготовить Ceylon к работе, можно найти в файле README.md, находящемся в корневом каталоге дистрибутива после его распаковки. Этот файл также доступен на GitHub.

Процесс компиляции и запуска программ лучше всего продемонстрировать с помощью простейшей тестовой программы, приведённой в листинге 1.

Листинг 1. Простой тестовый исходный код для Ceylon
void mytest() {
  print( "test completed" );
}

Действия, выполняемые вышеприведённой функцией, вполне очевидны (фактически это пресловутый helloworld). В терминах Ceylon такая функция называется функцией верхнего уровня (toplevel function), потому что она не является членом какого-либо конкретного типа (класса), и нет необходимости создавать некий объект для вызова функции верхнего уровня. Следовательно, такую функцию можно вызывать в исходном коде программы следующим образом:

mytest();

или запускать её на выполнение из командной строки.

Здесь уместно отметить, что в отличие от Java, C++ и C# в Ceylon нет статических (static) методов, но всё же можно считать функции верхнего уровня выполняющими подобную (в определённой мере) роль. Дело в том, что Ceylon имеет чётко выраженную блоковую структуру - любой вложенный блок всегда имеет доступ к объявлениям и определениям во всех содержащих его блоках. Вот это и есть главное отличие от статических методов Java, C++, C#.

Исходный код программы из листинга 1 необходимо сохранить в файле с именем mytest.ceylon в подкаталоге ./source (если такого каталога нет, то его нужно создать; это одно из требований к иерархии хранения исходных кодов и модулей). После этого можно скомпилировать и выполнить программу, как показано в листинге 2.

Листинг 2. Компиляция и запуск тестовой программы
$ ceylon compile source/mytest.ceylon
Note: Created module default
$ ceylon run --run=mytest default
test completed
$

Архив скомпилированного модуля default.car хранится в подкаталоге ./modules/default, созданном автоматически в процессе компиляции.

Некоторую информацию о дополнительных возможностях и ключах компиляции можно получить с помощью команды

ceylon help compile

а об особенностях запуска программ - с помощью команды

ceylon help run

Нетрудно догадаться, что команда

ceylon help

выведет информацию обо всех командах и ключах программной среды Ceylon.

3. Замечание о зависимости Ceylon от JDK

Для обеспечения нормальной работы Ceylon требуется наличие в системе установленной программной платформы Java 7. Проверить, установлена ли Java и каков номер её версии можно командами, показанными в листинге 3.

Листинг 3. Проверка версии программной платформы Java, установленной в системе
$ java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) Server VM (build 24.55-b03, mixed mode)
$ javac -version
javac 1.7.0_55

Если в системе установлена более старая версия Java, то необходимо заменить её на Java 7 или более новую версию. Кроме того, может потребоваться проверка и установка правильного значения системной переменной среды JAVA_HOME.

4. Замечание о кодировках символов

Иногда при компиляции Ceylon-программы может выводиться следующее сообщение:

unmappable character for encoding ASCII

Это означает, что в исходном коде программы встретился символ, кодировка которого отличается от кодировки, принятой по умолчанию в операционной системе. В этом случае необходимо явно задать кодировку в командной строке при компиляции:

ceylon compile --encoding=UTF-8 source/mytest.ceylon

5. Декларативный синтаксис для древовидных структур

Как уже было сказано выше, синтаксис Ceylon во многом позаимствован из C-подобных языков, и потому выглядит достаточно знакомым и привычным для программистов, имеющих опыт работы с этими языками. На таком фоне наиболее яркой особенностью Ceylon, отличающей его от языков-"собратьев", является поддержка иерархических структур данных непосредственно в самом ядре программной системы, и следует уделить немного больше внимания этой теме даже при первоначальном знакомстве с языком.

Иерархические структуры настолько часто встречаются в программировании и вообще в сфере информационных технологий, что для работы с ними создаются даже особые специализированные языки типа XML. Но когда на практике нужно писать процедурный код, взаимодействующий с иерархическими структурами, то "хроническое несответствие" между XML и применяемым ЯП преподносит целый букет проблем всех мастей. Именно поэтому в Ceylon предлагается специализированный встроенный "декларативный" синтаксис для определения иерархических структур. Особенно удобен и полезен он для создания пользовательских интерфейсов, как показано в листинге 4.

Листинг 4. Определение иерархической структуры выводимой таблицы
Table table = Table {
  title = "Squares and Cubes";
  rows = 5;
  Border {
    padding = 2;
    weight = 1;
  };
  Column {
    heading = "x";
    width = 10;
    String content( Integer row ) {
      return row.string;
    }
  },
  Column {
    heading = "x^2";
    width = 10;
    String.content( Integer row ) {
      return (row^2).string;
    }
  },
  Column {
    heading = "x^3";
    width = 10;
    String.content( Integer row ) {
      return (row^3).string;
    }
  }
};

Приведённая в листинге 4 иерархическая структура позволяет описать исключительно средствами языка таблицу с заданными характеристиками: заголовком, разделительными линиями и тремя столбцами, содержимое которых определено здесь же, в иерархической структуре. Конечно, подобную структуру можно организовать и средствами, например, языка C, определяя отдельные структуры для столбцов и рамки, а затем включив эти структуры (или указатели на них) в объединяющую структуру table, но приведённая здесь конструкция выглядит более наглядно и понятно.

Но этот встроенный декларативный синтаксис приобретает ещё больший вес и даёт ещё большую пользу, если использовать его как основу для формирования тестовых наборов, производящих разнообразные варианты вычислений непосредственно во встроенных скриптах, как показано в листинге 5.

Листинг 5. Формирование комплекта для тестирования заданных функций в виде иерархической структуры
Suite tests = Suite {
  Test {
    "sqrt() function test";
    void run() {
      assert( sqrt(1) == 1 );
      assert( sqrt(4) == 2 );
      assert( sqrt(9) == 3 );
    }
  },
  Test {
    "sqr() function test";
    void run() {
      assert( sqr(1) == 1 );
      assert( sqr(2) == 4 );
      assert( sqr(3) == 9 );
    }
  }
};

Любой фреймворк (рабочая среда), объединяющий Java и XML, требует специализированных дополнительных средств для осуществления контроля типов и выполнения прочих требуемых процедур. Рабочая среда Ceylon, использующая встроенную поддержку обработки древовидных структур, не требует никаких дополнений и сама справляется с подобными задачами.

Заключение

Язык программирования Ceylon, позиционируемый компанией Red Hat, Inc. как новый язык для разработки крупных программных проектов командами программистов, несомненно, представляет большой интерес. Обладая, с одной стороны, простым и понятным синтаксисом, во многом позаимствованным у C-подобных языков, Ceylon, в то же время, предлагает разработчику развитые, удобные и эффективные средства описания и обработки данных (типов данных), которые выгодно отличают данный язык от его аналогов.

В следующей статье цикла будут рассматриваться базовые аспекты, на которых основывается практическое применение языка программирования Ceylon.


Ресурсы для скачивания


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=969879
ArticleTitle=Язык программирования Ceylon: Часть 1. Общий обзор и основные функциональные возможности
publish-date=04282014