Випуск мови програмування 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.

Джерело: opennet.ru

Додати коментар або відгук