Crystal бағдарламалау тілінің шығарылымы 1.5

Crystal 1.5 бағдарламалау тілінің шығарылымы жарияланды, оны әзірлеушілер Ruby тіліндегі әзірлеудің ыңғайлылығын Си тіліне тән жоғары қолданбалы өнімділікпен біріктіруге тырысады. Crystal синтаксисі Ruby-ге жақын, бірақ толық үйлесімді емес, дегенмен кейбір Ruby бағдарламалары өзгертусіз жұмыс істейді. Компилятор коды Crystal тілінде жазылған және Apache 2.0 лицензиясы бойынша таратылады.

Тіл кодтағы айнымалылар түрлерін және әдіс аргументтерін нақты көрсету қажеттілігінсіз жүзеге асырылатын статикалық типті тексеруді пайдаланады. Кристалды бағдарламалар орындалатын файлдарға жинақталады, макростар бағаланады және компиляция уақытында код жасалады. Crystal бағдарламаларында С тілінде жазылған байлауларды қосуға болады. Кодты орындауды параллельдеу «spawn» түйінді сөзі арқылы жүзеге асырылады, ол негізгі ағынды блоктамастан, талшықтар деп аталатын жеңіл жіптер түрінде фондық тапсырманы асинхронды түрде орындауға мүмкіндік береді.

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

Ақпарат көзі: opennet.ru

пікір қалдыру