Crystal 1.0

Crystal — объектно-ориентированный язык программирования общего назначения.

Имея Ruby-подобный синтаксис Crystal является компилируемым и статически типизированным языком, однако объявление типов переменных либо аргументов методов не является обязательным, так как компилятор применяет специальный алгоритм вывода типов. Несмотря на схожесть синтаксиса, Crystal намного эффективнее, чем Ruby, компилируется в машинный код, используя LLVM, жертвуя при этом динамическими аспектами языка. По результатам тестов Crystal показывает схожую с языком С производительность. Язык использует Boehm garbage collector, обладает системой макросов, поддерживает дженерики, а также перегрузку методов и операторов. 

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

Выпуски 1.0.y будут включать лишь корректирующие исправления, а версии 1.x.0 будут предлагать новую функциональность и значительные изменения, сохраняя при этом совместимостью с кодом. Новые идеи и потенциально несовместимые изменения будут развиваться в отдельной ветке, на базе которой в последующем будет сформирован выпуск Crystal 2.0. Некоторые возможности Crystal 1.0 объявлены как предварительные и несмотря на наличие в ветке 1.0, они не подпадают под официальную поддержку. Среди таких возможностей моногопоточность, работа на платформе Windows, использование на системах с процессорами ARM.

Стандартная библиотека предоставляет большой набор типовых функций, в том числе средства для обработки CSV, YAML, и JSON, компоненты для создания HTTP-серверов и поддержки WebSocket. В процессе разработки удобно использовать команду "crystal play" которая формирует web-интерфейс (по умолчанию localhost:8080) для интерактивного выполнения кода на языке Crystal. 

Изменения в новой версии языка программирования:

  • В кортежах разрешено индексированное обращение к элементам разных типов, так как компилятор имеет информацию о том, какого типа каждый элемент. Например:
  • В строковых и символьных литералах запрещено использование суррогатных сокращений в escape-последовательностях Unicode, таких как "\uD834". Для кодирования произвольных значений следует использовать нотацию "\x".
  • В стандартной библиотеке удалена большая порция определений, макросов и методов, ранее помеченных устаревшими. Включая методы Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket,Hash#delete_if, Process#kill и т.д.
  • В макросах getter и property теперь обязательно требуется указание возвращаемого типа.
  • Метод округления по умолчанию изменён на TIES_EVEN ("округление банкира", до ближайшего целого, а для пограничных ситуаций до ближайшего чётного числа). В Number#round добавлен параметр RoundingMode, позволяющий выбрать метод округления. Среди доступных методов: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
  • В коллекциях обеспечена работа Enumerable#flat_map и Iterator#flat_map с элементами смешанных типов.
  • При сериализации последовательностей Enum теперь используются представление в форме строк с подчёркиванием.
  • Типы, определённые в модуле XML, переведены с использования struct на class.
  • Из соображений безопасности прекращено декодирование имён Cookie, а также кодирование и декодирование значений Cookie (перекодирование переложено на плечи фреймворков и приложений). Метод HTTP::Cookies.from_headers разделён на два варианта для серверов и клиентов.

Язык находится в активной стадии разработки и распространяется как свободное и открытое программное обеспечение под лицензией Apache версии 2.0. 

 

Последние материалы