Вышел Crystal 0.34.0
Вышла новая версия Crystal, компилируемого языка программирования с Ruby синтаксисом, главные особенности которого — рантайм с «вмонтированным» event loop«ом, в котором все операции ввода-вывода асинхронны, поддержка многопоточности (пока включается флагом при компиляции), исключительно простая и удобная работа с библиотеками на Си.
Начиная с 0.34.0 язык официально начинает твёрдой поступью двигаться в сторону первого настоящего релиза (т.е. версии 1.0).
В новой версии Crystal можно отметить следующие изменения и улучшения в порядке их важности:
-
В API добавлена новая библиотека журналирования Log, которая, в отличие от старой, умеет направлять сообщения в разные бекенды и по-разному эти сообщения фильтровать в зависимости от «источника»;
-
Рудименты из мира разработки на Си, Errno и WinError, использовавшиеся для примитивов ввода-вывода, уходят в прошлое благодаря иерархии исключений IO: Error (впрочем, использовать Errno никто пока не запрещает);
-
Убрана автоматическая подстановка «else nil» из оператора case/when/else. Это сделано для того, чтобы исключить случайный пропуск разработчиком одной из веток when при матчинге по детерминированным случаям наподобие enum«ов и прохода по типам из Union«а. Т.е., проще говоря, вот такой код больше работать не будет без указания ещё одного when («when Char») или задания else-ветки:
a = 1 || 'x' || "foo"
case a
when Int32
# ...
when String
# ...
end
-
Опция компилятора disable_overflow больше недоступна. Для операций с переполнением используйте методы &+, &-, &*;
-
Array#fill теперь летает быстрее пули благодаря замене туповатого цикла на один простой memset;
-
Менеджер шардов (пакетов), называющихся, как это ни парадоксально, shards, теперь использует более быстрый и эффективный алгоритм удовлетворения зависимостей Molinillo, подсмотренный в CocoaPods (Swift) и Builder (Ruby)
-
Добавлена поддержка LLVM 10, что по идее даст нам некий рост производительности, стабильности, etc.
…и множество других, на мой субъективный взгляд, менее существенных улучшений.
Хотелось бы отметить, что Crystal — это построенный на LLVM язык, позволяющий писать приложения порой быстрее, проще и лаконичнее, чем на его интерпретируемых «собратьях», и при этом получать на выходе довольно шустрый бинарник. На фоне Golang выделяется абсолютно полноценным ООП, поддержкой дженериков и очень простым и понятным синтаксисом. По своему назначению во многом аналогичен Nim, но при этом явным образом ориентирован на практическое применение «здесь и сейчас», благодаря чему имеет в своём API-арсенале множество нормально документированных удобных и качественных инструментов, поддерживаемых разработчиками языка и потому весьма стабильных.
>>> Анонс в блоге Crystal