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

Дадаць каментар