|
Professor Seleznov
|
 В середине мая 2026 года состоялся релиз функционального языка программирования Erlang 29. Решение нацелено на разработку распределённых отказоустойчивых приложений, обеспечивающих параллельную обработку запросов в режиме реального времени. Язык Erlang получил распространение в таких областях, как телекоммуникации, банковские системы, электронная коммерция, компьютерная телефония и организация мгновенного обмена сообщениями. Одновременно выпущен релиз OTP 29 (Open Telecom Platform) — сопутствующего набора библиотек и компонентов для разработки распределённых систем на языке Erlang. Проект Erlang/OTP 28 вышел в мае 2025 года.
 По информации OpenNET, основные изменения и дополнения в Erlang/OTP 29:
- в SSH‑сервере по умолчанию отключены сервисы shell и exec, а также подсистема SFTP. Для выполнения Erlang‑кода аутентифицированными пользователями через SSH теперь требуется изменение настроек. В SSH по умолчанию активирован гибридный алгоритм обмена ключами mlkem768×25519-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 для перемешивания списков в случайном порядке.
-Источник
|
|
|