Derxistina zimanê bernamenûsê Crystal 1.5

Serbestberdana zimanê bernamenûsê Crystal 1.5 hate weşandin, pêşdebirên ku hewil didin ku rehetiya pêşkeftina di zimanê Ruby de bi taybetmendiya performansa serîlêdana bilind a zimanê C re hev bikin. Hevoksaziya Crystal nêzîk e, lê bi tevahî bi Ruby re ne hevaheng e, her çend hin bernameyên Ruby bêyî guheztinê dimeşin. Koda berhevkar bi Crystal hatiye nivîsandin û di bin lîsansa Apache 2.0 de tê belavkirin.

Ziman kontrolkirina tîpên statîk bikar tîne, bêyî ku hewce bike ku bi eşkere cûreyên guhêrbar û argumanên rêbazê yên di kodê de were destnîşankirin. Bernameyên krîstal di pelên îcrakar de têne berhev kirin, bi makro têne nirxandin û kod di dema berhevkirinê de têne çêkirin. Di bernameyên Crystal de, gengaz e ku girêdanên ku bi C-yê hatine nivîsandin ve girêdin. Parallelîzasyona darvekirina kodê bi karanîna peyva key "spawn" ve tête kirin, ku dihêle hûn di moda asynchronous de peywirek paşîn bimeşînin bêyî astengkirina mijara sereke, di forma têlên sivik ên ku jê re fiber têne gotin.

Pirtûkxaneya standard komek mezin ji fonksiyonên hevpar peyda dike, di nav de amûrên ji bo pêvajoyê CSV, YAML, û JSON, pêkhateyên ji bo afirandina serverên HTTP, û piştgiriya WebSocket. Di dema pêvajoya pêşkeftinê de, hêsan e ku meriv emrê "lîstina krîstal" bikar bîne, ku ji bo pêkanîna înteraktîf a kodê di zimanê Crystal de navgînek malperê (localhost: 8080 bi xwerû) diafirîne.

Guhertinên sereke:

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

Add a comment