Crystal программалоо тилинин чыгарылышы 1.5

Crystal 1.5 программалоо тилинин релизи жарык көрдү, аны иштеп чыгуучулар Ruby тилинде иштеп чыгуунун ыңгайлуулугун Си тилине мүнөздүү жогорку тиркемелердин натыйжалуулугун айкалыштырууга аракет кылып жатышат. Crystal синтаксиси Rubyге жакын, бирок толугу менен шайкеш келбейт, бирок кээ бир ruby ​​программалары кайра иштелбестен иштейт. Компилятордун коду Crystal тилинде жазылган жана Apache 2.0 лицензиясы боюнча таратылган.

Бул тилде өзгөрмөлөрдүн түрлөрүн жана коддогу метод аргументтерин так көрсөтүүнүн зарылдыгы жок ишке ашырылган статикалык типти текшерүү колдонулат. Кристалл программалары компиляция убагында макро баалоо жана кодду түзүү менен аткарылуучу файлдарга түзүлөт. Crystal программаларында Си тилинде жазылган байланыштарды туташтырууга уруксат берилет. Коддун аткарылышын параллелдештирүү "spawn" ачкыч сөзүнүн жардамы менен жүзөгө ашырылат, ал негизги жипти блокировкалоосуз, була (Fiber) деп аталган жеңил жиптер түрүндө фондук тапшырманы асинхрондук режимде аткарууга мүмкүндүк берет.

Стандарттык китепкана жалпы функциялардын чоң топтомун, анын ичинде CSV, YAML жана JSON менен иштөө куралдарын, HTTP серверлерин куруу үчүн компоненттерди жана WebSocket колдоосун камсыз кылат. Иштеп чыгуу процессинде Crystal тилинде интерактивдүү кодду аткаруу үчүн веб-интерфейстин (демейки боюнча localhost:8080) түзүүчү “кристалл ойнотуу” буйругун колдонуу ыңгайлуу.

Негизги өзгөрүүлөр:

  • В компилятор добавлена проверка соответствия имён аргументов в реализации абстрактного метода и в его определении. В случае несоответствия имён теперь выводится предупреждение: 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, отключающая выделение цветом в выводе компилятора и интерпретатора.
  • Значительно улучшена работа в режиме интерпретатора.

Source: opennet.ru

Комментарий кошуу