Язык программирования Crystal - друг программистов Ruby
Crystal — объектно-ориентированный язык программирования общего назначения, спроектированный и разработанный Арье Боренцвейгом, Хуаном Вайнерманом и Брайаном Кардиффом. Развивается сообществом из более 300 разработчиков. Обладает Ruby-подобным синтаксисом, но, в отличие от Ruby, является компилируемым и статически типизированным языком, использующим вывод типов (в связи с чем явное объявление типов, как и в Ruby, не обязательно). Распространяется как свободное и открытое программное обеспечение под лицензией Apache версии 2.0.
Программы на Crystal компилируются средствами LLVM, при этом утрачены некоторые динамические аспекты, имеющиеся в Ruby, но эффективность программ намного выше, а производительность сравнима с программами на Си. Язык использует сборщик мусора Бёма, обладает системой макросов, поддерживает обобщённое программирование, перегрузку методов и операторов. Реализован интерфейс вызова функций из двоичных библиотек на Си и C++, при этом синтаксис взаимодействия с такими библиотеками максимально упрощён, что позволяет легко создавать библиотеки-обёртки, а не писать весь код с нуля. Также Crystal поддерживает ассемблерные вставки и прямое обращение по указателям — это считается небезопасной практикой, но не запрещено, поскольку необходимо, в частности, и для взаимодействия с функциями из внешних библиотек.
История
Работа над новым языком программирования была начата в июне 2011 года в компании Manas. Разработчики поставили перед собой цель создать язык с элегантностью и продуктивностью Ruby и скоростью, эффективностью и безопасностью типов, присущих компилируемым языкам программирования. Первоначально разработка получила название Joy, однако позже была переименована в Crystal.
Первый официальный выпуск языка состоялся в июне 2014 года. Изначально компилятор языка был написан на Ruby, пока в 2013 году не был переписан на Crystal. В июле 2016 года вошёл в индекс TIOBE. 22 марта 2021 года разработчики выпустили первую стабильную версия языка — 1.0.0.
Сообщество программистов Ruby знает Crystal
Для программистов Ruby не составит никакого особого труда использовать Crystal (т.к. по факту программист, знающий Ruby - знает на 99% и Crystal), так что сообщество программистов, предпочитающих красивый, лаконичный, изящный дизайн языка программирования, пополнилось ещё одним виликолепным инструментом - спасибо разработчикам Crystal. Если вдруг возникает необходимость написания нативного (бинарного) кода, то это можно очень легко и просто сделать. Скорость скомпилированных программ сопоставима с программами на C, а удобство и продуктивность программирования как на Ruby.
Очень радует, что элегантность и эстетичность кода Ruby по достоинству оценена - и воплощается в компилируемом языке программирования Crystal. А программисты Ruby, сами того не подозревая, сделали очень правильный выбор - и сейчас спектр задач, которые они могут реализовать ещё более расширился. Если учесть тот факт, что программисты Ruby - это, как правило, профессионалы высокого уровня, то сообщество Crystal может пополнится действительно высококлассными специалистами.
По датам выпусков релизов на официальном сайте видно, что проект поддерживается и развивается.
Официальный сайт языка программирования Crystal (Fast as C, slick as Ruby)
Типизация
Статическая типизация означает, что тип каждой переменной, параметра и метода известен на этапе компиляции. Статическая типизация позволяет Crystal предотвращать целый ряд ошибок еще до запуска программы.
Однако статическая типизация часто ассоциируется с необходимостью явного указания типов, но в Crystal используется и механизм инференции типов — способности компилятора автоматически определять типы на основе контекста использования переменных и выражений.
Конкуренция и параллелизм
Модель акторов в Crystal — это абстракция, которая позволяет рассматривать каждую единицу параллельного выполнения как актора, способного обрабатывать сообщения, выполнять задачи и взаимодействовать с другими акторам, все это дает высокий уровень изоляции между акторами
Акторы могут:
- Создавать других акторов.
- Отправлять сообщения другим акторам.
- Обрабатывать входящие сообщения.
В Crystal модель акторов реализована через использование волокон и каналов.
Волокна представляют собой легковесные потоки выполнения, которые позволяют выполнять множество задач параллельно внутри одного операционного потока. В отличие от традиционных потоков, переключение контекста между волокнами происходит быстрее, поскольку оно управляется самим языком, а не ОС.
Каналы в Crystal типизированы, что означает, что канал для передачи сообщений определенного типа может передавать только сообщения этого типа.
Полезные библиотеки
Установка библиотек в Crystal осуществляется через систему управления зависимостями под названием Shards. Shards аналогичен gem-ам в Ruby и используется для управления библиотеками, которые использует проект.