„Crystal“ programavimo kalbos išleidimas 1.5

Paskelbtas Crystal 1.5 programavimo kalbos leidimas, kurio kūrėjai stengiasi suderinti patogumą kurti Ruby kalba su aukštu C kalbai būdingu programų našumu. „Crystal“ sintaksė yra artima „Ruby“, bet ne visiškai su ja suderinama, nepaisant to, kad kai kurios „ruby“ programos veikia be pertvarkymo. Kompiliatoriaus kodas parašytas Crystal ir platinamas pagal Apache 2.0 licenciją.

Kalba naudoja statinį tipo tikrinimą, įdiegtą be būtinybės kode aiškiai nurodyti kintamųjų tipų ir metodo argumentų. „Crystal“ programos yra kompiliuojamos į vykdomuosius failus, su makrokomandų įvertinimu ir kodo generavimu kompiliavimo metu. Crystal programose leidžiama jungti įrišimus, parašytus C kalba. Kodo vykdymo lygiagretinimas atliekamas naudojant raktinį žodį „spawn“, kuris leidžia paleisti foninę užduotį asinchroniniu režimu, neužblokuojant pagrindinės gijos, lengvų gijų, vadinamų pluoštais (Fiber), pavidalu.

Standartinėje bibliotekoje pateikiamas didelis bendrųjų funkcijų rinkinys, įskaitant CSV, YAML ir JSON tvarkymo įrankius, HTTP serverių kūrimo komponentus ir WebSocket palaikymą. Kūrimo procese patogu naudoti komandą „crystal play“, kuri generuoja žiniatinklio sąsają (pagal nutylėjimą localhost:8080) interaktyviam kodo vykdymui Crystal kalba.

Pagrindiniai pakeitimai:

  • В компилятор добавлена проверка соответствия имён аргументов в реализации абстрактного метода и в его определении. В случае несоответствия имён теперь выводится предупреждение: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Warning: positional parameter ‘name’ corresponds to parameter ‘number’ of the overridden method FooAbstract#foo(number : Int32), which has a different name and may affect named argument passing
  • При присвоении аргументу нетипизированного метода значения переменной, данный аргумент теперь ограничивается типом этой переменной. 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, отключающая выделение цветом в выводе компилятора и интерпретатора.
  • Значительно улучшена работа в режиме интерпретатора.

Šaltinis: opennet.ru

Добавить комментарий