Доступен первый (из трёх) релиз-кандидат грядущей мажорной версии Erlang/OTP 25.
Цель релиза – получить обратную связь от пользователей. Разработчики приветствуют даже отзывы вида: «У меня всё работает». Подробнее о способах оставить отклик и получить файлы OTP 25-rc1 можно прочитать по ссылке под новостью.
Ключевые изменения
ERTS и JIT
- JIT теперь доступна и на 64-разрядных ARM процессорах.
- JIT научилась осуществлять типозависимые оптимизации на основе информации из BEAM-файлов.
- Улучшена поддержка JIT для внешних инструментов вроде perfиgdb, позволяющая показывать номера строк и оригинальный Erlang-код, когда удаётся найти таковой.
ERTS, stdlib, kernel
- 
Новая настройка для ETS таблиц: {write_concurrency, auto}. Эта настройка заставляет таблицы автоматически изменять количество блокировок в зависимости от текущего уровня конкурентности. Настройка{decentralized_counters, true}включается по умолчанию, если{write_concurrency, auto}активирована. Замеры производительности можно посмотреть по ссылке.
- 
BEAM-файлы собранные под OTP 21 и раньше не совместимы с новой версией. Данное ограничение необходимо для возможности задействовать свежие оптимизации в полном объёме. 
- 
Очередь сигналов процесса с флагом message_queue_data=off_heapоптимизирована для обеспечения параллельного приёма сообщений от множества процессов (см. замеры производительности).
- 
Появилась возможность делать пути в файлах проекта относительными. Таким образом можно менять положение системного каталога Erlang без необходимости пересборки приложений. 
- 
Для функций :erlang:float_to_list/2иerlang:float_to_binary/2доступен параметрshort. Он позволяет создать кратчайшее строковое представление числа, которое можно будет сконвертировать обратно в исходное.
- 
В модуле uri_stringдоступны две новые функцииquote/1иunqoute/1. Они заменяют признанные устаревшимиhttp_uri:encodeиhttp_uri:decode.
- 
Модуль peerзаменил модульslave, который признан устаревшим и будет удалён в OTP 27.
- 
Функция обратного вызова format_status/2для модулейgen_server,gen_statemиgen_eventпризнана нежелательной в пользуformat_status/1. Новая функция добавляет возможность ограничивать и изменять множества разных вещей, а не только состояние.
- 
Модуль timerбыл улучшен и оптимизирован, что сделало сервер таймера более устойчивым к перегрузкам. Функцияtimer:sleep/1теперь принимает произвольное большое целое.
Компилятор
- 
Реализована конструкция maybe ... endиз EPP-49. Она позволяет упростить код который раньше приходилось писать с множеством глубоко вложенных условий. Для включения нового функционала необходимо передать компилятору настройку{enable_feature, maybe_expr}.
- 
Исключение {badrecord, ExpectedRecordTag}выбрасываемое при неудачной попытке сопоставления записи (record) с образцом или попытке её обновления, было заменено на{badrecord, ActualValue}, гдеActualValue- значение которое было передано вместо ожидаемого.
- 
Доступен новый атрибут -nifs(), сигнализирующий компилятору и загрузчику какие функции могут быть переопределены с помощью NIF, функциейerlang:load_nif/2.
- 
Переработаны сообщения об ошибках конструирования бинарных значений. 
Модуль Crypto
- Добавлена функция crypto:hash_equals/2 способная осуществить сравнение двух дайджестов за константное время.
Разное
- 
Новое HOWTO для разработчиков описывает как собирать и тестировать Erlang/OTP-приложения в процессе исправления ошибок или добавления нового функционала. 
- 
Теперь для каждого нового Pull-запроса на Github’е будет осуществляться автоматическое тестирование, что позволит раньше обнаруживать ошибки привносимые предлагаемыми доработками. 
Подробный список изменений можно посмотреть здесь.
>>> Подробности









