Релиз Erlang/OTP 29

Состоялся релиз функционального языка программирования Erlang 29, нацеленного на разработку распределённых отказоустойчивых приложений, обеспечивающих параллельную обработку запросов в режиме реального времени. Язык получил распространение в таких областях, как телекоммуникации, банковские системы, электронная коммерция, компьютерная телефония и организация мгновенного обмена сообщениями. Одновременно выпущен релиз OTP 29 (Open Telecom Platform) — сопутствующего набора библиотек и компонентов для разработки распределённых систем на языке Erlang.

Основные новшества:

  • В SSH-сервере по умолчанию отключены сервисы shell и exec, а также подсистема SFTP. Для выполнения Erlang-кода аутентифицированными пользователями через SSH теперь требуется изменение настроек. В SSH по умолчанию активирован гибридный алгоритм обмена ключами mlkem768x25519-sha256.
  • В библиотеке SSL в конфигурации по умолчанию выставлен наиболее приоритетным гибридный алгоритм обмена ключами «x25519mlkem768», стойкий к подбору на квантовом компьютере и представляющий собой комбинацию из X25519 ECDH и алгоритма ML-KEM (CRYSTALS-Kyber).
  • Добавлен атрибут «-unsafe» для пометки функций небезопасными (unsafe). В библиотеке Erlang/OTP подобные функции помечены и для них компилятор теперь выдаёт предупреждение. Добавлена возможность отслеживания через xref вызова unsafe-функций и функций без документации.
  • Для корректной работы сторонних сборочных инструментов, таких как Rebar3, фильтрация игнорируемых вызовов (ignore_xref) теперь выполняется непосредственно внутри xref.
  • Добавлен модуль ct_doctest для автоматического тестирования примеров кода из документации.
  • Добавлен модуль io_ansi для создания консольных приложений, поддерживающих подстановку в терминал ANSI-последовательностей (Virtual Terminal Sequences), например, для изменения стиля и цвета текста.
  • При поиске файловых путей с кодом (PATH) текущий каталог («.») перемещён с первой на последнюю позицию списка и теперь проверяется в последнюю очередь.
  • Прекращено формирования 32-разрядных сборок для Windows.
  • Реализован полноценный отдельный тип данных для записей (native record, EEP-79), который можно использовать вместо традиционных записей, построенных на кортежах.
  • Добавлен ограничитель «is_integer/3» для проверки целых чисел на принадлежность диапазону (например, «is_integer(I, 0, 100)»).
  • Реализованы генераторы списков с множественными значениями (EEP-78), возвращающие несколько элементов за итерацию (например, «[-I, I || I <- [1, 2, 3]]» выдаст «[-1,1,-2,2,-3,3]»).
  • Добавлен флаг compr_assign, позволяющий связывать переменные прямо внутри генераторов (например, «[H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0]»).
  • В JIT-компиляторе улучшена генерация машинного кода для сопоставления и создания бинарных данных с несколькими little-endian сегментами.
  • В компиляторе повышена эффективность генерируемого кода в ситуациях, когда значения в «map» не зависят от генератора (например, «#{K => 42 || K <- List}»).
  • В компиляторе реализован вывод предупреждений при использовании устаревшего оператора «catch» вместо «try…catch», экспорта переменных из подвыражений (например, «file:open(File, AllOpts = [write, {encoding,utf8}])»), использования «and»/»or» вместо «andalso»/»orelse», указания неоптимальных шаблонов сопоставления (например, «{a,B} = {X,Y}»).
  • В STDLIB реализованы функции rand:shuffle/1 и rand:shuffle_s/2 для перемешивания списков в случайном порядке.

Источник: http://www.opennet.ru/opennews/art.shtml?num=65455