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