Состоялся релиз функционального языка программирования 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 42 || K