LINUX.ORG.RU

Релиз Erlang/OTP 24.0

 ,


1

1

Вышел важный релиз платформы для разработки высоконагруженных и отказоустойчивых систем - Erlang/OTP за номером 24.

Выпуск включает в себя более 1400 коммитов, изменивших около полумиллиона строк. Ключевым нововведением является добавление JIT-компилятора «BeamAsm» в виртуальную машину Erlang'а (BEAM). Попытки реализации данного функционала предпринимались на протяжении ~10 лет и наконец увенчались успехом.

Историю добавления JIT в BEAM можно прочитать в блоге.

Комментарии разработчиков и пользователей о производительности:

Цитата из описания pull-запроса с JIT-функционалом:

Насколько BeamAsm быстрей интерпретатора? Данный показатель в значительной степени зависит от того чем занимается ваше приложение. Например, число estone'ов, в модуле для оценки производительности, возросло на 50%, т.е. теперь, за тоже время выполняется в половину больший объём работы. Разбег в ускорении отдельных тестов варьируется от 170% (сопоставление с образцом) до близкого к нулю (обработка больших сообщений). Большой прирост наблюдается в нагрузке с интенсивными вычислениями, а код с акцентом на обмен сообщениями - практически не ускорился.

Если запустить тесты разборки JSON из комплекта Poison или Jason, наблюдается ускорение от 30 до 130 процентов (в среднем ~70%). В некоторых бенчмарках BeamAsm даже быстрее чем jiffy - json-парсер написанный на Си.

Хосе Валим, создатель языка программирования Elixir, также работающего поверх виртуальной машины BEAM, успел оценить ускорение полученное с добавлением JIT-компиляции:

Одним из многих положительных эффектов JIT оказалось сокращение времени сборки сервера hexpm (включая зависимости) с 111 секунд до 77, что на 31% быстрее. :)

Из подводных камней можно выделить:

  • Увеличение потребления памяти на 10% в сравнении с интерпретацией без JIT-компиляции.
  • JIT работает только для x86/x86-64 архитектур, но поддержка ARM64 запланирована.

Замечания по сборке Erlang/OTP 24 из исходников:

Для поддержки JIT-компиляции, сборка должна осуществляться компилятором с поддержкой C++17. Проверить работоспособность можно с помощью вызова: erlang:system_info(emu_flavor). В качестве альтернативы может быть исползован официальный докер-образ.

Другие изменения:

  • Выполнение EEP 54 (Erlang Enhancement Process), призванного реализовать вывод более человекочитаемых сообщений об ошибках во встроенных функциях. Этот механизм так же может быть использован в библиотеках или приложениях. Пример из твиттера Хосе Валима.
  • Интерфейсы графических компонентов, например Observer'а, были переписаны на wxWidgets 3.

Поздравляю сообщество разработчиков на BEAM-языках с значительным релизом, призываю обновить Erlang/OTP, для получения бесплатного прироста производительности!

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

★★★★

Проверено: Shaman007 ()

Сам-то я Elixir’ом заинтересовался, поэтому держу руку на пульсе и здесь. Короч, хорошая новость. Поздравляю всех!

perl5_guy ★★★★ ()

Нужно.

Несколько лет стоит ejabberd. Юзеров не сотни тысячь, но high availability всё равно пригодилась: когда-то разбирал подкроватный сервер, но очень не хотелось даунтайма (нужна была связь по джабберу) - быстро развернул вторую ноду на ноуте и она крутилась несколько часов, после чего всё вернулось на первую (и опять единственную) ноду. Причем настройка такого недокластера заняла мне лишь пару минут.

А что ещё полезного на Erlang/Elixir? И насколько они популярны в Erlangen?

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

А что ещё полезного на Erlang/Elixir?

Да много чего. И веб-фреймворки есть и даже по машинному обучению пилят штуки: https://www.youtube.com/watch?v=fPKMmJpAGWc Вообще оч приятный язык. Нравится на нём писать, хотя я пока только начинаю.

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

Elixir отлично с Erlang'ом совмещается и кучу СВЕЖЕЙ КРОВИ в сообщество привёл. Так что нет противоречий. Хотя WhatsApp вроде как именно Elixr'ная тема, а ещё есть Discord. Там вообще мечта хипстера - Elixir взяли, потом выкинули Go, пепеписав всю Goвнину на Rust.

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

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

прямо сейчас сижу на проекте и пилим на ерланге. Выбор ерланга для этого проекта был одним из самых идиотских решений и его делали люди не владеющие ерлангом в достаточной степени. Просто повелись на «прикольно писать на нем». В итоге год назад, когда только-только начал переговоры с фейсбуком (из ватсапа), рекрутер вышел на меня и в итоге захантили. В общем, сижу я теперь и зарбираю эти авгиевы конюшни. Ребята про ОТП ничего не слышали и в целом лютая процедурщина. Рукалицо - каждодневная реакция на код.

Подытожу… ни эликсир, ни эрланг сейчас брать для новых проектов не стоит. Да, интересно, но на рынке уже есть инструменты гораздо удобнее и производительнее, и также эфективно утилизирующие многопроцессорность (собственно это и было причиной всплеска ерланга в кругах разрабов 10 лет назад)

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

Хотя WhatsApp вроде как именно Elixr’ная тема

откуда дровишки? :). у них чистый ерланг. и хантят они чистых ерлангеров.

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

а ещё есть Discord. Там вообще мечта хипстера - Elixir взяли, потом выкинули Go, пепеписав всю Goвнину на Rust.

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

ergo ()

Питон говно

anonymous ()
Ответ на: комментарий от perl5_guy
pushb   macro   byteval
db      06Ah,byteval
endm

pushb   080h   
pop     eax
anonymous ()
Ответ на: комментарий от ergo

на рынке уже есть инструменты гораздо удобнее и производительнее

Например? Такие чтобы получить надежность приложения пять девяток?

Djanik ()
Ответ на: комментарий от Hertz

Перестаньте насиловать труп. Труп? По руководствоваться твоей логике значит и java/python/c/c++ труп?

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

Эрланг довольно простой как язык, но сегодня проблема его в том что он очень нишевый и другие языки в общем случае лучше. Основная фича эрланга с вытесняющей многозадачностью очень редко является критической и сегодня все мейнстримные языки решают это так или иначе, от корутин в го до всяких отложенных задач типа Celery в питоне, тредпулов в джаве и тд. А по всем остальным параметрам эрланг не очень выдающийся язык.

anonymous ()
Ответ на: комментарий от Djanik

Например? Такие чтобы получить надежность приложения пять девяток?

ох уж эти мифы 😄. вы неверное из тех, кто и сегфолты бим-машины не видел, верно? или хотя бы внутренние ошибки компилятора, которые не дают собрать абсолютно корректный код, я прав, не доводилось наблюдать?

а если серьезно, то сейчас на том же golang можно писать очень сложные и высокопроизводительные вещи, не менее надежные как и сам ерланг. отстрелить себе ногу и в ерланге не сложно, если уж на то пошло

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

This repository contains in the subdirectory eeps/ the EEPs (Erlang Extension Proposals), in Markdown (*.md) format produced in the Erlang Enhancement Process.

perl 100%

Случайно заметил лол

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

на рынке уже есть инструменты гораздо удобнее и производительнее, и также эфективно утилизирующие многопроцессорность

Можно примеры? golang? Хм, насчет удобства и особенно производительности разработчика спорно.

Какие еще языки/платформы?

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

Хм, насчет удобства и особенно производительности разработчика спорно.

ерланг не вытащит, что умеет голэнг. я на го реализовал стек ерланга и он в среднем в 5 раз быстрее ерланговского сетевого стека (хотя он на Си написан). сравнивать виртуальную машину с компилируемым голэнгом бессмысленно, там отрыв на порядок.

относительно удобства… с одной стороны субъективно, но туллинг у ерланга ущербный. один только профайлер у го чего стоит, а у ерланга релиз менеджмент через ребар, который вроде прикидывается удобным, но на деле с ним возни немало. покрытие кода раньше вроде работало, но в какой-то момент сломали и сейчас его нет (убил полдня и не смог заставить строить карту покрытия).

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

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

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

Основная фича эрланга с вытесняющей многозадачностью

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

ergo ()

wxWidgets? он же на C++, если ничего не путаю. А как Erlang с обычным C дружит? Читаю «Изучай Эрланг во имя добра». Из немногой литературы, что ещё имеет смысл осваивать?

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

wxWidgets

Ненужно, есть святой ncurses.

anonymous ()
Ответ на: комментарий от Android

wxWidgets? он же на C++, если ничего не путаю.

забанься мань! учи матчасть.

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

у них очень убогий туллинг

Насколько я себе представляю, в Эрланге невозможна пошаговая отладка и приостановка программы в нужном месте с помощью среды разработки? Отладка программного кода ведётся путём выдачи и последующего чтения логов? Кроме переполнения очередей сообщений много ли ошибок в эрланговских программах по сравнению с многопоточными программами на других языках?

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

Насколько я себе представляю, в Эрланге невозможна пошаговая отладка и приостановка программы в нужном месте с помощью среды разработки?

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

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

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

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

есть графический дебаггер из коробки

не все «коробки» включают в себя дебагер и обсервер. иногда приходится пересобирать или доустанавливать.

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

можно подулючиться удаленно из той машины, где уже есть дебагер

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

вы неверное из тех, кто и сегфолты бим-машины не видел, верно?

Верно, прочел несколько статей. Но был впечатлен, что «Erlang was reported to have been used in production systems for over 20 years with an uptime percentage of 99.9999999%.».

Т.е. чисто формально, простой системы за 20 лет работы составил 0.6 секунды. Это очень круто.

Djanik ()
Ответ на: комментарий от anonymous

есть графический дебаггер из коробки

Я нашел обзор возможностей отладчика тут. На больших проектах работает? На первый взгляд, отладчик слабо похож на основное орудие труда программистов «Эрикссона».

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

Вполне работает на распределенных системах. Можно поставить весь кластер из многих нод на точку останова.

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

Там нет статической типизации из-за дизайна Оно специально было сделано так чтобы можно было обновлять код в полёте. И это killer feature в принципе, одна из Jit очень убогий, даже arm32 нет

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

Оно специально было сделано так чтобы можно было обновлять код в полёте.

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

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

Плюсую каждое слово. Насколько мне нравится язык, особенно в части акторной модели и OTP, настолько же ублюдский тулинг вокруг него. И местами дремучая стандартная библиотека. Но с библиотекой еще можно жить, а тот же rebar(3), ну это просто пиздец. В итоге прекрасная идея о горячей замене кода в тулах реализована так, что пользоваться ей не хочется. И я уже несколько раз лез в потроха ребара, но чинишь одно, ломается другое.

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

выкинули Go, пепеписав всю Goвнину на Rust.

А Go уже недостаточно хипстерский?

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

64 бита, явно под новый мак заточено Полно всяких железяк мелких на arm32 - на них jit неизвестно будет ли вообще

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

64 бита, явно под новый мак заточено Полно всяких железяк мелких на arm32 - на них jit неизвестно будет ли вообще.

Я бы не расчитывал на это. Зачем кому-то может понадобиться Эрланг даже на обычном компе? Я думаю, что для «облаков» делают.

Enthusiast ()

Зачем он нужен, если есть идеальный JavaScript.

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