Выпуск языка программирования Crystal 1.5
Опубликован релиз языка программирования Crystal 1.5, разработчики которого пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку Си. Синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы. Код компилятора написан на языке Crystal и распространяется под лицензией Apache 2.0.
В языке применяется статическая проверка типов, реализованная без необходимости явного указания типов переменных и аргументов методов в коде. Программы на Crystal компилируются в исполняемые файлы, с вычислением макросов и генерацией кода во время компиляции. В программах на языке Crystal допускается подключение биндингов, написанных на языке Си. Распараллеливание выполнения кода осуществляется при помощи ключевого слова «spawn», которое позволяет запустить фоновую задачу в асинхронном режиме, не блокируя основной поток, в виде легковесных потоков, именуемых файберами (Fiber).
Стандартная библиотека предоставляет большой набор типовых функций, в том числе средства для обработки CSV, YAML, и JSON, компоненты для создания HTTP-серверов и поддержки WebSocket. В процессе разработки удобно использовать команду «crystal play» которая формирует web-интерфейс (по умолчанию localhost:8080) для интерактивного выполнения кода на языке Crystal.
Основные изменения:
- В компилятор добавлена проверка соответствия
имён аргументов в реализации абстрактного метода и в его определении. В случае несоответствия имён теперь выводится предупреждение:
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, отключающая выделение цветом в выводе компилятора и интерпретатора.
Значительно улучшена работа в режиме интерпретатора.
Источник: http://www.opennet.ru/opennews/art.shtml? num=57549
© OpenNet