Випуск мови програмування Crystal 1.5

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

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

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

Основні зміни:

  • У компілятор додано перевірку відповідності імен аргументів у реалізації абстрактного методу та у його визначенні. У разі невідповідності імен тепер виводиться попередження: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo def foo(name : Int32) : Nil ^— Warning: positional parameter 'name' corresponds to parameter 'number' of overredden method
  • При присвоєнні аргументу нетипізованого методу значення змінної даний аргумент тепер обмежується типом цієї змінної. class Foo @x : Int64 def initialize(x) @x = x # параметр x отримає тип @x end end
  • Дозволено додавання анотацій до параметрів методів або макросів. def foo(@[MaybeUnused] x); end # OK
  • Додано підтримку використання констант як індексів та імен у кортежах. KEY = "s" foo = {s: "String", n: 0} puts foo[KEY].size
  • У API File для видалення файлів та каталогів додані нові методи File#delete? і Dir#delete?, що повертають false у разі відсутності файлу чи каталогу.
  • Посилено захист методу File.tempfile, який тепер не допускає нульових символів у стоках, що формують ім'я файлу.
  • Додана змінна оточення NO_COLOR, яка відключає виділення кольором у виведенні компілятора та інтерпретатора.
  • Значно покращено роботу в режимі інтерпретатора.

Джерело: opennet.ru

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