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