Выпуск языка программирования Crystal 1.16

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 4139
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Crystal 1.16
Дата публикации:Fri, 11 Apr 2025 10:57:44 +0300




Опубликован релиз языка программирования Crystal 1.16, разработчики которого пытаются совместить удобство разработки на языке Ruby с высокой производительностью приложений, свойственной языку Си. Синтаксис Crystal близок к языку Ruby, но не полностью совместим с ним, несмотря на то, что без переработки выполняются некоторые ruby-программы. Код компилятора написан на языке Crystal и распространяется под лицензией Apache 2.0.




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



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




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


    mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4)

    10.times do
    mt_context.spawn do
    do_something
    end
    end

    gtk = Fiber::ExecutionContext::Isolated.new("Gtk") do
    Gtk.main
    end
    gtk.wait


    В методе 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, 10000000000_u64].sum" следует писать "[1, 10000000000_u64].sum(0_u64)".

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

    Добавлена поддержка набора компиляторов LLVM 20.
    Объявлены устаревшими вызовы LLVM::ABI и LLVM::TargetMachine#abi.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63052

Жизнь за Нер'зула!

Ответить