Команда Erlang/OTP представила новый главный релиз версии 29.0, который включает как полезные нововведения, так и некоторые несовместимые изменения. Одно из главных обновлений касается атрибутов unsafe, позволяющих маркировать функции как небезопасные. Компилятор теперь автоматически генерирует предупреждения при вызове таких функций, а новый инструмент xref помогает находить их использования в коде и выявлять места с отсутствующей документацией. В безопасности SSH произошли серьёзные изменения: демоны теперь по умолчанию отключают службы shell и exec, реализуя принцип «безопасность по умолчанию», что блокирует выполнение произвольного кода под аутентифицированными пользователями, если это не явно настроено. Аналогично, подсистема SFTP больше не включена автоматически. В шифровании алгоритм обмена ключами x25519mlkem768 стал предпочтительным по умолчанию, обеспечивая защиту от атак как классических, так и квантовых компьютеров. Также появился модуль io_ansi для работы с виртуальными последовательностями терминала и добавлен ct_doctest для проверки примеров в документации.
Среди общих улучшений стоит отметить изменение порядка аргументов текущего рабочего каталога, который теперь идет последним, а на Windows больше не выпускаются сборки с 32-битной архитектурой. В новых языковых функциях реализованы нативные рекорды как настоящий тип данных, а также новая функция-страж is_integer, проверяющая целые числа в заданном диапазоне. Компилятор стал эффективнее обрабатывать итерируемые выражения с константными значениями и теперь генерирует лучший код для бинарных данных с несколькими малобитовыми сегментами. Инструмент Rebar3 теперь сам обрабатывает атрибут ignore_xref, гарантируя корректную работу инструментов разработки.
Разработчики активировали несколько новых предупреждений по умолчанию, чтобы очистить код от устаревших практик. Теперь компилятор сигнализирует об использовании оператора catch вместо try и выдает ошибки при выводе переменных из подвыражений или использовании устаревших логических операторов. Появились предупреждения и на совпадения паттернов типа {a,B} = {X,Y}, которые лучше писать как {a=X,B=Y}. В стандартной библиотеке добавлены функции для перемешивания списков rand:shuffle/1 и rand:shuffle_s/2. Более подробную информацию о всех изменениях можно найти в README, где также перечислены потенциальные несовместимости.