Erlang/OTP 28: Нова мажорна версія з розширеними можливостями

Erlang/OTP 28: Нова мажорна версія з розширеними можливостями

Зустрічайте нову мажорну версію Erlang/OTP 28! Цей програмний каркас (фреймворк) містить набір бібліотек і шаблонів проектування для побудови масштабованих розподілених додатків на мові програмування Erlang. Нова версія принесла значні покращення в різних аспектах платформи.

Нові можливості мови Erlang в версії 28

Erlang/OTP 28 представляє кілька важливих нововведень у синтаксисі та функціональності мови:

  • З’явилася можливість надсилати процесам приоритетні повідомлення.
  • Покращення під назвою “zip генератори” дозволяє запускати декілька спискових генераторів (comprehensions) паралельно: [A+B || A <- [1,2,3] && B <- [4,5,6]] сформує список: [5,7,9].
  • Спискові генератори тепер можуть бути строгими і при невідповідності шаблону кидати виключення, замість ігнорування аргументу.
  • Тепер для чисел з плаваючою точкою можна використовувати будь-яку основу.

Покращення компілятора та JIT в Erlang/OTP 28

  • Раніше розмір атому був обмежений 255 байтами, тепер довжина ідентифікатора обмежена 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

Окрім того, версія Erlang/OTP 28 принесла важливі зміни в підсистемі 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.

Інтерфейс командного рядка та термінал в Erlang/OTP 28

  • Режим запуску erl -noshell оновлений двома підрежимами: raw і cooked. Підрежим cooked відповідає старій поведінці, а режим raw може використовуватися для обходу підтримки редагування рядків у терміналі.
  • Термінальна оболонка тепер виводить підказку про спосіб переривання команд, що виконуються довго, якщо команда виконується довше п'яти секунд.

Оновлення стандартної бібліотеки STDLIB

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

Покращення в Dialyzer та SSL

  • Реалізовані номінальні типи згідно з EEP 69.
  • Якщо ваша програма використовує протокол TLS 1.3, то перехід на версію Erlang/OTP 28 забезпечить прискорення від 15% до 25%.

Інтеграція з редактором Emacs також покращена: команда indent-region тепер краще обробляє багаторядкові рядки.

Детальніше про всі зміни та можливі проблеми сумісності можна дізнатися в офіційному блозі Erlang або ознайомитися з файлом README на офіційному сайті Erlang.