LINUX.ORG.RU

Erlang/OTP 25

 ,


0

4

Доступен Erlang/OTP 25. Выпуск содержит новые функции, улучшения и доработки, нарушающие обратную совместимость.

Наиболее интересные изменения

stdlib

  • Новая функция filelib:ensure_path/1 позволяющая убедиться, что перечисленные в пути каталоги существуют;
  • Новые функции для модуля lists: uniq/1 и uniq/2;
  • В модуль rand добавлен быстрый генератор псевдослучайных чисел. Подробнее можно прочитать в статье «Fast random integers».

Компилятор, kernel, stdlib, syntax_tools

  • Появилась возможность включать экспериментальные нововведения как указано в EEP-60. Доработки активируются на этапе компиляции с помощью аргументов командной строки erlc или директив в файле с исходным кодом. Аналогичные параметры могут быть использованы со средой выполнения erl. Примером может служить экспериментальная конструкция maybe (EEP-49), доступная как maybe_expr.

erts и JIT

  • JIT заработал на 64-битных ARM-процессорах;
  • JIT поддерживает типозависимые оптимизации на основе информации из BEAM-файлов;
  • Такие инструменты, как perf и gdb, лучше поддерживают JIT, что позволяет показывать номера строк и даже оригинальный код Erlang.

erts, stdlib, kernel

  • Доступна новая настройка для ETS-таблиц: {write_concurrency, auto}. Она включает для таблиц автоматическое регулирование числа блокировок в зависимости от текущего объёма конкурентности. Настройка {decentralized_counters, true} включается автоматически, если {write_concurrency, auto} активирована.
    Результаты замеров производительности доступны здесь;
  • BEAM-файлы собранные под OTP 21 и раньше не совместимы с новой версией. Данное ограничение необходимо для возможности задействовать свежие оптимизации в полном объёме;
  • Очередь сигналов процесса с флагом message_queue_data=off_heap оптимизирована для обеспечения параллельного приёма сообщений от множества процессов (см. замеры производительности);
  • Появилась возможность делать пути в файлах проекта относительными. Таким образом можно менять положение системного каталога Erlang без необходимости пересборки приложений;
  • Для функций :erlang:float_to_list/2 и erlang:float_to_binary/2 доступен параметр short. Он позволяет создать кратчайшее строковое представление числа, которое можно будет сконвертировать обратно в исходное;
  • В модуле uri_string доступны две новые функции quote/1 и unqoute/1. Они заменяют признанные нежелательными http_uri:encode и http_uri:decode;
  • Модуль peer заменил модуль slave, который признан нежелательным и будет удалён в OTP 27;
  • Функция обратного вызова format_status/2 для модулей gen_server, gen_statem и gen_event признана нежелательной в пользу format_status/1. Новая функция добавляет возможность ограничивать и изменять множества разных вещей, а не только состояние;
  • Модуль timer был улучшен и оптимизирован, что сделало сервер таймера более устойчивым к перегрузкам. Функция timer:sleep/1 теперь принимает любое большое целое.

Компилятор

  • Реализована конструкция maybe ... end из EPP-49. Она позволяет упростить код, который раньше приходилось писать с множеством глубоко вложенных условий. Для включения нового функционала необходимо передать компилятору настройку {enable_feature, maybe_expr};
  • Исключение {badrecord, ExpectedRecordTag} выбрасываемое при неудачной попытке сопоставления записи (record) с образцом или попытке её обновления, было заменено на {badrecord, ActualValue}, где ActualValue – значение которое было передано вместо ожидаемого;
  • Доступен новый атрибут -nifs(), сигнализирующий компилятору и загрузчику какие функции могут быть переопределены с помощью NIF, функцией erlang:load_nif/2;
  • Тексты ошибок создания битовых значений с помощью соответствующего синтаксиса (<<...>>) были улучшены и дополнены. Это касается как сообщений в оболочке так и вывода erl_error:format_status/3,4;
  • Формат настроек для особенностей (англ. «features») стал более последовательным. Аргументы erlc и compile(...) теперь выглядят так: {feature, feature-name, enable | disable}. Директива -feature(...) имеет формат -feature(feature-name, enable | disable).

Модуль Crypto

  • Добавлена функция crypto:hash_equals/2, способная осуществить сравнение двух дайджестов за константное время.

ssl

  • Добавлена экспериментальная настройка {certs_keys,[cert_key_conf()]}, нужная для аутентификации клиента или сервера с помощью сертификатов и ключей.

public_key

  • Добавлены функции для получения сертификатов операционной системы.

Диалайзер

  • Различные оптимизации и новые предупреждения. Также появились новые настройки missing_return и extra_return.

Разное

  • Новое HOWTO для разработчиков описывает как собирать и тестировать Erlang/OTP-приложения в процессе исправления ошибок или добавления нового функционала;

  • Теперь для каждого нового Pull-запроса на Github’е будет осуществляться автоматическое тестирование, что позволит раньше обнаруживать ошибки привносимые предлагаемыми доработками.

Развёрнуто про наиболее интересные изменения можно прочитать здесь.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 3)

Мэйби монаду и arm64 на глагну, остальное под кат!

filosofia
()

Очередь сигналов процесса с флагом message_queue_data=off_heap оптимизирована для обеспечения параллельного приёма сообщений от множества процессов (см. замеры производительности)

так и не понял сути. что значит «параллельный прием» одним процессом (в бенчах), если это актор. исходя из этого непонимания не понял цифр бенчмарков.

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)
Ответ на: комментарий от menangen

erlang второе дыхание получил в конце нулевых, когда нужно было мультипроцессорность утилизировать. всякие перлы с рубями и питонами это делали очень неудобно и не очень производительно. на этом хайпе родился эликсир. потом появился го, раст и хайп поехал вниз. сейчас только эликсир немного держится. ерланг пошел обратно, хоть и кичится некоторыми попытками показать свою живость (это я про JIT, который 10 лет пилили). Поздно. Это скорее костыль ускорить накопившуюся тонну кода легаси, которую лень переписать. Новые проекты на ерланге писать - только из академического интереса, разве. На эликсире - ну, такое себе.

Раньше ерланг был интересен благодаря

  • легковесным процессам (теперь есть тот же го с горутинами, не говоря уж про остальных)

  • хот релоад (теперь есть CI автоматизирующий деплой по самое нехочу, так что потребность этой фичи стремительно приблизилась к нулю)

  • его ОТП (они теперь не уникальны. в джаве появилась Акка, в го есть ergo, для дотнета тоже что-то есть)

Сам ерланг сегодня бесполезен, но спасибо за его технологии, которые он развил.

ergo ★★★
()
Ответ на: комментарий от ergo

Давай, зарелоади мне этим своим CI монолит на жабке, который стратрует полчаса. Начитаются бузвордов.

crutch_master ★★★★★
()
Ответ на: комментарий от ergo

А функциональный подход и отказоустойчивость? Всё перечисленное тобой в совокупности и делает Erlang замечательным инструментом. Главное что он проектировался с указанными возможностями в голове, откуда они достаточно органично встроены в язык, а не пришиты сбоку. Это как регулярные выражения, которые есть вообще везде, но удобно их использовать можно только в Perl или Raku.

perl5_guy ★★★★★
() автор топика
Ответ на: комментарий от perl5_guy

Раку можно не считать из-за глупого названия. Регулярные выражения примерно одинаково используютсясво всех языках, если есть поддержка PCRE (распространённый формат регулярных выражений). Erlang является функциональным языком ради надёжности (по замыслу афтаров) - был предназначен для телекоммуникационных систем может быть с тысячами узлов, то есть для массово-параллельной обработки, где отладка затруднена.

Partisan ★★★★
()
Ответ на: комментарий от DarkAmateur

Да, работает он на erlang. Но это единственная зависимость. В остальном - erlang попросту не нужен, ибо есть elixir.

endlessend
()
Ответ на: комментарий от menangen

Немного разные языки. Из общего только то, что конкурентный код не так больно писать, как в других мейнстримных.

theNamelessOne ★★★★★
()

Работодателей по миру на этом добре больше, чем полтора? Ну если вдруг с первым придется расстаться.

vikrom
()
Ответ на: комментарий от ergo

легковесным процессам (теперь есть тот же го с горутинами, не говоря уж про остальных)

Вроде бы как да, но в эрланге вытесняющая многозадачность в отличие от других. В го насколько я знаю это сделано по таймеру. Критично ли это различие - в большинстве случаев скорее нет.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от loz

в го шедулер имеет вытесняющую многозадачность начиная с 1.14, который релизнули несколько лет назад.

ЗЫ вытесняющий шедулер критичен на однопроцессорных системах. на многопроцессорных тоже, но немного меньше.

ergo ★★★
()
Ответ на: комментарий от Partisan

Раку можно не считать из-за глупого названия.

Аналитика 80 уровня, ЛОР по-прежнему торт.

hobbit ★★★★★
()
Ответ на: комментарий от vikrom

Работодателей по миру на этом добре больше, чем полтора?

Даже на ЛОРе есть как минимум один :)

hobbit ★★★★★
()

ТС, а по Эрлангу есть какие-нибудь хорошие книжки? Если на русском, то вообще супер, но интересуют любые.

hobbit ★★★★★
()
Ответ на: комментарий от vikrom

Я сам хотел устроиться младшим Elixir’щиком. До известных событий работы было вполне себе достаточно. Сейчас оч. плохо стало. Первую ступеньку выбило. Поэтому продолжу писать на Perl’е за горы тыщ, а на Elixir’е пока домашнеживотные прожекты буду ковырять. Опытные же люди трудоустроятся без проблем.

perl5_guy ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Я в основном по Elixir’у читал книжки. По Erlang’у только ликбез на ЕМНИП 150 страниц который со стандартной документацией идёт. Сейчас читаю «Programming Erlang» от самого Армстронга. Добрался только до 87 страницы и пока что мне всё оч. нравится. Заданий достаточно и написано приятно. Проблема в том что вначале идут тривиальные вещи и чего там дальше будет я не знаю. Русский вариант я не искал, но меня тыкали в незаконченный перевод от энтузиастов. Может есть законченный коммерческий.

perl5_guy ★★★★★
() автор топика
Ответ на: комментарий от perl5_guy

«Learn you some erlang» хорошая книга. Она и в онлайне есть. Рекомендую.

Сам по себе язык простой как валенок. Там библиотеку ОТП нужно понять. Остальное само придет. Ну, ребар еще изучить.

ps: есть у этого языка пара выражений - andalso и orelse. лично я стараюсь их избегать. у них есть подводный камень - выражения должны быть evaluated в булевый тип. при чем явно. т.е. ты должен знать, что значения в это выражение стопудово булевые. еже ли хоть один из параметров не булевый, то результат всегда будет false. в общем засада еще та. рекомендую использовать классические ‘,’ для and и ‘;’ для or.

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)
Ответ на: комментарий от ergo

«Learn you some erlang» хорошая книга. Она и в онлайне есть. Рекомендую.

Про эту книгу я знаю. Некоторые главы из неё читал когда мнезию изучал. Показалась скучной. Может как-нибудь потом

Сам по себе язык простой как валенок.

Си тоже простой как валенок, если вы понимаете о чём я.

perl5_guy ★★★★★
() автор топика
Ответ на: комментарий от menangen

Erlang это же яп для внутренних нужд Ericsson. Внешние факторы на него не влияют.

untitl3d
()
Ответ на: комментарий от xwicked

Это сервер жаббера, один из трёх самых известных.
Написан на Эрланге.

hobbit ★★★★★
()
Ответ на: комментарий от ergo

хот релоад (теперь есть CI автоматизирующий деплой по самое нехочу, так что потребность этой фичи стремительно приблизилась к нулю)

Hot reload, это разве не про что изменения применяются в рантайме?

А то старт контейнера даже с простым сервисом это небыстро.

ritsufag ★★★★★
()
Ответ на: комментарий от perl5_guy

Хорошая книжка, помню когда добрался до pattern matching и опробовал на irc боте - был в восторге.Приятные воспоминания))

st4l1k ★★
()
Ответ на: комментарий от ritsufag

Да, это про горячую замену. Просто современные решения уже не занимаются этой мелкой моторикой и деплоят сразу сервис. А деплой автоматизирован по самое не хочу.

PS пользуюсь ероангом уже 10 лет и никого не встречал, кто бы хот релоадом пользовался. Им пользуются скорее всего в очень узкой нише телекома.

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)

Что там с динамическими оперденями?

yoghurt ★★★★★
()
Ответ на: комментарий от vikrom

Коллега как-то позвонил на вакансию (в Израиле), где требовался Эрланг. Охреневший голос с того конца поведал, что разместил вакансию по приколу, посмотреть, есть ли кто в Израиле со знанием эрланга.

В целом, согласен с @ergo, эрланг дал нам технологии, а синтаксис у него больно вырвиглазный, что б им пользоваться добровольно.

AngryElf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.