Параллельные потоки, «черный ящик» и распределение Вейбулла. Что нового в языке Racket 9.0

Параллельные потоки, «черный ящик» и распределение Вейбулла. Что нового в языке Racket 9.0

Состоялся релиз языка программирования Racket 9.0 с поддержкой параллельных потоков.

image

Команда разработчиков Racket объявила о выходе Racket 9.0. Дистрибутив уже доступен на сайте проекта, описание изменений опубликовано в блоге Racket.

Главное нововведение версии 9.0 - поддержка параллельных потоков. Ранее в Racket были зеленые потоки, а также механизмы параллелизма через futures и places. Теперь добавлены параллельные потоки, которые используют несколько ядер процессора в рамках штатной модели потоков языка.

Параллельные потоки создаются с использованием нового аргумента #:pool при вызове thread. Это позволяет объединять потоки в пул и управлять распределением задач по вычислительным ресурсам. При указании аргумента #:keep со значением 'results поток сохраняет результат выполнения, который затем можно получить через thread-wait.

В релиз включен механизм black-box wrapper. Он предотвращает случаи, когда оптимизирующий компилятор полностью убирает некоторые вычисления. Такой механизм нужен для более корректного измерения производительности и проверки бенчмарков.

Функция decompile-linklet получила поддержку преобразования linklet обратно в s-выражения. Это полезно при анализе кода и работе с внутренними представлениями программ на Racket.

В реализации BC Racket изменено поведение функции processor-count. Теперь она всегда возвращает число параллельных вычислительных единиц, на которые ориентируется система. Для архитектуры AArch64 стали доступны пакеты формата natipkg, рассчитанные на инфраструктуру сборки и тестирования пакетов.

Подсистема Check Syntax теперь глубже отслеживает идентификаторы в поле origin синтаксических объектов, что дает более подробную информацию при анализе кода. В библиотеке math добавлены распределения Вейбулла, расширяющие набор доступных статистических функций.

Помимо этого, в Racket 9.0 внесены исправления ошибок и обновления документации. Проект развивается как открытое программное обеспечение при участии сообщества разработчиков. Подробности релиза и ссылки на дистрибутив приведены на сайте и в блоге Racket.