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
замість сучасногоtry
…catch
…end
. - Деякі вбудовані функції з побічними ефектами (наприклад,
binary_to_atom/1
) оптимізуються в блокахtry
…catch
таким же чином, як 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.