Доступен первый (из трёх) релиз-кандидат грядущей мажорной версии 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’е будет осуществляться автоматическое тестирование, что позволит раньше обнаруживать ошибки привносимые предлагаемыми доработками.
Подробный список изменений можно посмотреть здесь.
>>> Подробности