Crystal (язык программирования)


Crystal — объектно-ориентированный язык программирования общего назначения, спроектированный и разработанный Арье Боренцвейгом, Хуаном Вайнерманом и Брайаном Кардиффом. Развивается сообществом из более 300 разработчиков. Обладает Ruby-подобным синтаксисом, но, в отличие от Ruby, является компилируемым и статически типизированным языком, использующим вывод типов (в связи с чем явное объявление типов, как и в Ruby, не обязательно). Распространяется как свободное и открытое программное обеспечение под лицензией Apache версии 2.0.

Программы на Crystal компилируются средствами LLVM, при этом утрачены некоторые динамические аспекты, имеющиеся в Ruby, но эффективность программ намного выше, а производительность сравнима с программами на Си[5][6][7]. Язык использует сборщик мусора Бёма[англ.], обладает системой макросов, поддерживает обобщённое программирование, перегрузку методов и операторов. Реализован интерфейс вызова функций из двоичных библиотек на Си и C++, при этом синтаксис взаимодействия с такими библиотеками максимально упрощён, что позволяет легко создавать библиотеки-обёртки, а не писать весь код с нуля. Также Crystal поддерживает ассемблерные вставки и прямое обращение по указателям — это считается небезопасной практикой, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.

Работа над новым языком программирования была начата в июне 2011 года в компании Manas. Разработчики поставили перед собой цель создать язык с элегантностью и продуктивностью Ruby и скоростью, эффективностью и безопасностью типов, присущих компилируемым языкам программирования. Первоначально разработка получила название Joy, однако позже была переименована в Crystal.

Первый официальный выпуск языка состоялся в июне 2014 года. Изначально компилятор языка был написан на Ruby, пока в 2013 году не был переписан на Crystal. В июле 2016 года вошёл в индекс TIOBE. 22 марта 2021 года разработчики выпустили первую стабильную версия языка — 1.0.0.

Следующий код объявляет коллекцию (массив), состоящую из элементов различных типов данных; Crystal в данном случае автоматически создаёт тип объединения с индивидуальными типами данных элементов массива:

Каналы (Channel) используются для коммуникации между фиберами, создаваемыми при помощи команды spawn: