Erlang/OTP 28.0

good-penguin.png

Встречайте очередную мажорную версию Erlang/OTP!

Erlang/OTP — программный каркас (фреймворк), содержащий набор библиотек и шаблонов проектирования для построения масштабируемых распределённых приложений на языке программирования Erlang.

Новые возможности языка:

  • Появилась возможность отправлять процессам приоритетные сообщения (см. EEP 76).
  • Улучшение под названием «zip генераторы» позволяет запускать несколько списковых генераторов (comprehensions) параллельно: [A+B || A <- [1,2,3] && B <- [4,5,6]] сформирует список: [5,7,9].
  • Списковые генераторы теперь могут быть строгими и при несовпадении шаблона кидать исключение, вместо игнорирования аргумента:
1> [X ||{ok, X} <- [{ok, 1}, error, {ok, 3}]].
[1,3]
2> [X ||{ok, X} <:- [{ok, 1}, error, {ok, 3}]].
** exception error: no match of right hand side value error
  • Теперь для чисел с плавающей точкой можно использовать любое основание (см. EEP 75).

Улучшения компилятора и JIT:

  • Ранее размер атома был ограничен 255 байтами, это означало, что атом с идентификатором состоящим только из эмодзи, мог быть не длинее 63 символов. Теперь длина идентификатора ограничена 255 символами, а не байтами.
  • Компилятор может подсказать как поправить некоторые типы ошибок. Например, при попытке использовать неопределённую переменную A, при определённой A0, может быть напечатано сообщение: 'A' is unbound, did you mean 'A0'?.
  • Опция warn_deprecated_catch включает предупреждения при использовании устаревших выражений catch в форме catch Expr вместо современного trycatchend.
  • Некоторые встроенные функции с побочными эффектами (например, binary_to_atom/1) оптимизируются в блоках trycatch таким же образом, как guard BIF«ы, что повышает производительность.
  • Анализ псевдонимов компилятором стал быстрее и менее консервативным, позволяя применять оптимизации записей и бинарных структур в большем количестве случаев.
  • Для некоторых аргументов оптимизирована работа maps:put/3.

Изменения в ERTS:

  • Добавлена функция trace:system/3. Она обладает интерфейсом, аналогичным erlang:system_monitor/2, но дополнительно поддерживает трассировку сессий.
  • Функция os:set_signal/2 теперь поддерживает установку обработчиков сигналов SIGWINCH, SIGCONT и SIGINFO.
  • Две новые встроенные функции (erlang:processes_iterator/0 и erlang:process_next/1) позволяют эффективно обходить таблицу процессов, улучшая масштабируемость по сравнению с функцией erlang:processes/0.

Интерфейс командной строки и терминал:

  • Режим запуска erl -noshell обновлен двумя подрежимами: raw и cooked. Подрежим cooked соответствует старому поведению, а режим raw может испльзоваться для обхода поддержки редактирования строк в терминале. В режиме raw нажатия считываются по мере их поступления, без ожидания нажатия «Enter». Кроме того, режим raw отключает отображение введенных символов на экране;
  • Терминальная оболочка теперь выводит подсказку о способе прерывания долго выполняющихся команд, если команда выполняется дольше пяти секунд.

STDLIB:

  • В модуле binary появилась функция join(Binaries, Separator) позволяющая объединять список двочиных строк.
  • По умолчанию наборы (sets), создаваемые модулем sets, теперь представляются в виде ассоциативных таблиц (maps).
  • Модуль регулярных выражений re перешел на использование библиотеки PCRE2 взамен устаревшей PCRE.
  • Появился модуль zstd, поддерживающий сжатие в формате Zstandard.

Dialyzer:

SSL:

  • Если ваша программа использует протокол TLS 1.3, то переход на версию Erlang/OTP 28 обеспечит ускорение от 15% до 25%.

Интеграция с редактором Emacs:

  • Команда indent-region в редакторе Emacs теперь лучше обрабатывает многострочные строки.

Подробнее обо всех изменениях и возможных проблемах совместимости смотрите в ссылке под новостью или файле README.

>>> Запись в блоге: «Erlang/OTP 28 Highlights»

©  Linux.org.ru