Доступен язык программирования Crystal 1.0


Состоялся релиз языка программирования Crystal 1.0. Выпуск отмечен как первый значительный релиз, который подвёл итоги 8 лет работы и ознаменовал стабилизацию языка и готовность для использования в рабочих проектах. В ветке 1.x будет поддерживаться обратная совместимость и гарантируется отсутствие изменений в языке и стандартной библиотеке, негативно влияющих на сборку и работу существующего кода.

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

Напомним, что разработчики Crystal пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку Си. Синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы. Код компилятора написан на языке Crystal и распространяется под лицензией Apache 2.0.

В языке применяется статическая проверка типов, реализованная без необходимости явного указания типов переменных и аргументов методов в коде. Программы на Crystal компилируются в исполняемые файлы, с вычислением макросов и генерацией кода во время компиляции. В программах на языке Crystal допускается подключение биндингов, написанных на языке Си. Распараллеливание выполнения кода осуществляется при помощи ключевого слова "spawn", которое позволяет запустить фоновую задачу в асинхронном режиме, не блокируя основной поток, в виде легковесных потоков, именуемых файберами (Fiber).

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

Основные изменения:

  • В кортежах разрешено индексированное обращение к элементам разных типов, так как компилятор имеет информацию о том, какого типа каждый элемент. Например:

    • tuple = {1, "hello", 'x'}
      v = tuple\[0..1\] # выдаст {1, "hello"}
      typeof(v) # => Tuple(Int32, String)
    • В строковых и символьных литералах запрещено использование суррогатных сокращений в 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 разделён на два варианта для серверов и клиентов.
    Источник: https://www.opennet.ru/opennews/art.shtml?num=54813


Comments 0