Llançament del llenguatge de programació Crystal 1.5

S'ha publicat el llançament del llenguatge de programació Crystal 1.5, els desenvolupadors del qual intenten combinar la comoditat del desenvolupament en el llenguatge Ruby amb l'alt rendiment de l'aplicació característica del llenguatge C. La sintaxi de Crystal és propera a Ruby, però no és totalment compatible, encara que alguns programes Ruby s'executen sense modificacions. El codi del compilador està escrit en Crystal i es distribueix sota la llicència Apache 2.0.

El llenguatge utilitza la verificació de tipus estàtica, implementada sense necessitat d'especificar explícitament els tipus de variables i els arguments del mètode al codi. Els programes Crystal es compilen en fitxers executables, amb macros avaluades i codi generat en temps de compilació. Als programes Crystal, és possible connectar enllaços escrits en C. La paral·lelització de l'execució del codi es realitza mitjançant la paraula clau "spawn", que permet executar una tasca en segon pla de manera asíncrona, sense bloquejar el fil principal, en forma de fils lleugers anomenats fibres.

La biblioteca estàndard ofereix un gran conjunt de funcions comunes, incloses eines per processar CSV, YAML i JSON, components per crear servidors HTTP i suport WebSocket. Durant el procés de desenvolupament, és convenient utilitzar l'ordre "crystal play", que genera una interfície web (localhost:8080 per defecte) per a l'execució interactiva de codi en el llenguatge Crystal.

Principals canvis:

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

Font: opennet.ru

Afegeix comentari