категории | RSS

Релиз языка программирования Crystal 1.16

9 апреля 2025 года состоялся релиз языка программирования Crystal 1.16 (проект доступен онлайн для ознакомления). В этом проекте авторы решения пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку C. Исходный код проекта опубликован на GitHub под лицензией Apache License 2.0.

По информации OpenNET, синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы.

В языке Crystal применяется статическая проверка типов, реализованная без необходимости явного указания типов переменных и аргументов методов в коде. Программы на Crystal компилируются в исполняемые файлы, с вычислением макросов и генерацией кода во время компиляции. В программах на языке Crystal допускается подключение биндингов, написанных на языке C. Распараллеливание выполнения кода производится при помощи ключевого слова «spawn», которое позволяет запустить фоновую задачу в асинхронном режиме, не блокируя основной поток, в виде легковесных потоков, именуемых файберами (Fiber).

Стандартная библиотека Crystal предоставляет набор типовых функций, среди которых средства для обработки CSV, YAML, и JSON, компоненты для создания HTTP‑серверов и поддержки WebSocket. В процессе разработки кода на Crystal можно использовать команду «crystal play», которая формирует веб‑интерфейс (по умолчанию localhost:8080) для интерактивного выполнения кода на языке Crystal.

Основные изменения и доработчик в Crystal 1.16:

добавлена экспериментальная поддержка запуска легковесных потоков (fiber) в отдельных контекстах исполнения (Execution Contexts), что позволяет добиться более эффективного параллельного выполнения задач — блокировка потоков в одном контексте, не приводит к остановке выполнения в другом;

в методе Slice.literal обеспечен вывод типа элементов, содержащихся в срезе (slice), и добавлена поддержка работы в интерпретаторе;

в макросах sizeof и alignof обеспечено предоставление информации о стабильных типах;

в стандартную библиотеку добавлены новые методы: Indexable#find, #find!, EventLoop#wait_readable и #wait_writable;

в компилятор добавлен длинный вариант опции «‑o» — «‑output» и реализована возможность указания каталога в вместо файла (имя файла будет выбрано в соответствии с именем файла с кодом);

в генератор документации добавлена возможность включения в документацию приватных и защищённых объектов, а также объектов в библиотечных обвязках (lib, fun, union, cstruct, external, type);

в методе «File.match?» задействован новый алгоритм сопоставления файловых путей, позволивший избавиться от некоторых проблем и ограничений. Например, теперь корректно обрабатываются экранирование символов (под маску «\t» подпадает «t», а не символ «t»), разделение путей (маска «a**» охватывает «ab», но не срабатывает для «ab/c», а маска «**/a» охватывает «a»), вложенные шаблоны (маска «{[}]}» охватывает «}»), диапазоны (маска «[a‑]» охватывает «‑»);

в именах параметров определений (defs), макросов и блоков объявлены устаревшими суффиксы «?» и «!»;

в методах Enumerable#sum и #product убрано автоматическое определение типа возвращаемого значения, если тип элементов является объединением (union). При вызове данных методов теперь нужно явно указывать тип, например, вместо «[1, 10 000 000 000_u64].sum» следует писать «[1, 10 000 000 000_u64].sum(0_u64)»;

В HTTP::Request обеспечен корректный разбор частей URL;

добавлена поддержка набора компиляторов LLVM 20;

объявлены устаревшими вызовы LLVM::ABI и LLVM::TargetMachine#abi.



Источник новости: habr.com

DimonVideo
2025-04-11T14:50:02Z

Здесь находятся
всего 0. За сутки здесь было 0 человек
Яндекс.Метрика