Выпуск языка программирования Crystal 1.2

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

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

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

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

  • Добавлена возможность назначения подкласса обобщенного класса элементу родительского класса.
       class Foo(T); end
       class Bar(T) ‹ Foo(T); end
       x = Foo
       x = Bar
    
  • В макросах для игнорирования значения в цикле «for» теперь можно использовать символ подчёркивания.
       {% for _, v, i in {1 => 2, 3 => 4, 5 => 6} %}
         p {{v + i}}
       {% end %}
    
  • В макросы добавлен метод «file_exists?» для проверки существования файла.
  • В стандартной библиотеке реализована поддержка 128-разрядных целых чисел.
  • Добавлен модуль Indexable: Mutable (T) с реализацией расширенных операций для коллекций, таких как BitArray и Deque.
       ba = BitArray.new(10) # ba = BitArray[0000000000]
       ba[0] = true          # ba = BitArray[1000000000]
       ba.rotate!(-1)        # ba = BitArray[0100000000]
    
  • Добавлен метод XML: Node#namespace_definition для извлечения специфичного пространства имён из XML.
  • Объявлены устаревшими методы IO#write_utf8 и URI.encode, вместо которых следует использовать IO#write_string и URI.encode_path.

  • На второй уровень перемещена поддержка 32-разрядной архитектуры x86 (готовые пакеты больше не формируются). Готовится перевод на первый уровень поддержки архитектуры ARM64.
  • Продолжена работа по обеспечению полноценной поддержи платформы Windows. Добавлена поддержка Windows-сокетов.
  • Для macOS добавлен универсальный пакет, работающих как на устройствах с процессорами x86, так и на оборудовании с чипом Apple M1.



Источник: http://www.opennet.ru/opennews/art.shtml? num=55982

© OpenNet