#30 Почему WhatsApp, Discord и другие гиганты выбирают Erlang? | Юрий Жлоба

друзья привет С вами очередной выпуск подкаста организованное программирование и сегодня мы разговариваем сразу о двух языках это Эликсир Ирлан разговариваю я о них с Юрой жлобой Юр Привет всем привет Да с Юрой мы Достаточно давно знакомы когда-то ещё на заре появления хекслет Юра был одним из первых Кто делал под него курсы и в целом мы пересекались потому что мы тоже были частью Ирлан сообщества мы пересекались на стачку на стачке вя кино конференции это кстати последний раз когда мы собственно с Юрой виделись оффлайн Вот и с тех пор только пересекаемся онлайн Я иногда вижу тебя в комментариях у меня в Telegram канале Так что мы с где-то всегда немножко рядышком и сегодня мы с разных сторон обсудим вот эти два языка Ну по сути это один язык или два связанных очень сильно как на нано правильно сказать да и в этом смысле они оба для меня очень близки потому что во-первых я на них писал я их люблю

пропагандируют сделанный на Эликсир который был когда-то сделан на эрланг Ну и во многом кстати не могу не оставить этот референс А всё это наверное благодаря Льву Валки Ну если кто его знает практика функционального программирования который как раз был в Ульяновске который очень сильно Тогда весь город хотел писать на Ирлан соответственно мы это делали и вот так он Это распространял это перекинулась на меня от меня в свою очередь тоже там на кого-то Ну и от тебя Юр тоже потому что я знаю что ты сейчас сй курс меня тоже именно Лев вакин

завёртка ется приходить на подкаст потому что большие корпорации требуют Суровый дресс-код но в остальном он конечно произвёл большой эффект всеми своими действиями и вот мы об этом сейчас будем говорить А Юра между прочим В разработке очень мало того что давно так ещ лет работал в гейминге там по полной программе всё это исполнилось и вот буквально недавно перешёл к Максу лашину воф Sonic А кто не знает Макс Лапшин собственно тоже знатный ланги по крайней мере изначально но сейчас уже Достаточно давно Бизнесмен и с Максом Мы когда-то даже работаем Пит код Коми пишет Код Да вот ну что ж есть даже шанс что может быть он нас посмотрит Макса Я тоже давно не видел Вот поэтому попробуем Юр с тобой про это поговорить Давай сначала чтобы люди поняли что колан и Эликсир их соотношения И после этого сначала про Ирлан поговорим да что это вообще такое Да хорошо тема интересная сравнить иланг Эликсир потому что с одной стороны как бы много общего с другой стороны они не очень-то и похожи во многих аспектах поэтому интересно начать конечно да Надо с того что такое Ирлан это это из в Восьмидесятых годах появилась такая идея сделать того времени куртис сечас у на есть кубер в годах его не было ного поточным программированием было сложно вот поэтому Ну компания ER которая занималась телекоммуникационным оборудованием Вот она писала софт для этого оборудования и

всё там было как-то более-менее понятно А с софтом было сложно потому что софт надо было писать во-первых многопоточный во-вторых отказоустойчивый И это всё во времена когда подходящих языков программирования было для того для другого Вот они сделали этот язык соответственно он достаточно старый это ему с восьмидесятых годов уже там за 40 лет и достаточно консервативно он не так чтобы прямо очень сильно изменился с этих пор вот поэтому на современный взгляд он выглядит Ну непривычно и где-то может даже и неудобно Вот Но если привыкнуть то всё красиво и хорошо а вот Эликсир - Это другая история это совсем молодой он появился там в годах десятых в четырнадцатом что ли Не помню точно вот и это была попытка сделать быстрый веб вот авторы эликсира

они писались на разных веб фреймворка наибольшее влияние оказал там Руби и рубинс фреймворк который очень удобен для бизнеса но очень медленный И проблемы медленного языка авторы эликсира пытались решить таким образом взять Лан платформу и поверх неё построить что-то такое на чём было бы удобно делать ве вот поэтому в основе этих двух языков лежит одна и та же виртуальная машина с одинаковыми свойствами но языки достаточно разные по синтаксису по мощности по гибкости по способности там

чтобу покод выполняется на одной и той же виртуальной машине то есть да это похоже на то как JavaScript typescript живут вместе или как для виртуальной машины Java там есть целая пачка языков там и jav и котлин и скалы и что-то ещё вот примерно та же история Угу есть несколько важных моментов которые надо уточнить для людей которые не в курсе Потому что ты сказал Вот он там создавался для особых ситуаций и подходящих языков не было А вот что всё-таки то есть в принципе ну сколько там было довольно много всяких разных языков Да конечно современные языки что-то отовсюду тянут но при этом Почему Ирлан а за ним Эликсир всё-таки является немножко обособленным потому что мы-то с тобой секрет знаем Давай немножко расскажем типа А в чём особенность Почему именно этот язык он немножко особняком стоит от всех остальных языков что его отличает так сильно значит да Надо посмотреть чем занимался компания ин экн Это телекоммуникационное оборудование то есть много абонентов одновременно звонят у них там длится эта сессия телефонный разговор вот к одно к одной и той же аппаратуре подключено много абонентов они должны разговаривать и их сессии не должны прерываться вот При этом надо там апгрейдить софт и резерв резервирование делать р и так далее Вот то есть компания уже тогда решала проблемы распределённых систем в те времена когда про распределённой системы ещ не особо-то люди слышали Не особо была какая-то научная база Вот это сейчас мы знаем по теме достаточно много а тогда нет и в общем-то проблема решалась попыткой применить туда функциональное программирование это кстати один из хороших подходов для многопоточности и для распределённых систем значит какие именно фишки функционального программирования помогают в первую очередь это иммутабельность иммутабельность

динами которые в многопоточности возникают вот ну модель акторов да то есть у нас главная история Какая что он реально функциональный язык но редкий случаи Кстати да вот про это часто говорят люди такие Ну вот функциональные языки Они часто теоретические Потому что люди там хотят экспериментировать хотят просто какую-то там чистоту ради частоты например как в хасле Да а и про Ирлан всегда говорили что выбор функциональщики

это распределённые системы это возможность работать на разных узлах которые между собой взаимодействуют необходимость работать с гигантскими аптайм а с возможностью во время работы интенсивной апгрейдить софт Да и сам язык и при этом чтобы всё не ломалось продол работать соответственно минимальное количество Ликов то есть супер мега надёжная система способна ещё восстанавливаться там после сбоя всеми возможными способами сама А И когда его строили соответственно были такие условия Да что максимальная возможность утилизации там всех ресурсов и распределения по узлам он это умеет соответственно у тебя распределённая система это модель акторов Да которая соответственно тоже такая же Что у нас там ещё Это история с падениями вот эти супервизора и так далее да то что у тебя восстанавливается всё само Ну там наверно ещё можно много чего перечислять то как это устроено Но это мы чуть попозже с тобой да я бы вот хотел вернуться к этому моменту ты сказал что они практики да Вот именно вот разница между практикой сть возм язык хаскель который разрабатывается профессором в университете чистым теоретиком а здесь команда которая именно пыталась решить практическую задачу причём они вовсе не ставили себе цели придумать язык программирования Вот они пробовали разные языки которые на то время существовали там середина восьмидесятых там язык Си только появился там какието Эмен по

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

обла Под свою задачу но или это случайно получилось или это какой-то талант и интуиция но в итоге этот язык оказался вполне подходящим для решения задач общего назначения насколько я помню вообще первая имплементация была на прологе написана и сам синтаксис с вот этими запятыми точками имеет очень [музыка]

прологом прикоснулся к прологу а там дело же даже не просто в многопоточности Кстати а потому что если бы это была просто многопоточность да то у тебя Ну потоков много ты всё равно не сделаешь Там была именно Задача в том что у тебя абонентов просто какое-то безумное количество одновременно и ты столько потоков Ну не запустишь и поэтому тебе нужен был какой-то другой механизм для того чтобы держать состояние в памяти иметь возможность переключать контексты и так далее и собственно опять же я тут немножко наверное Может фантазирую Потому что я не знаю В какой последовательности это происходило но они каким-то образом пришли Вот к этой концепции собственно акторов когда у тебя а можем мы сказать Это для того чтобы люди понимали что это Грин треды Ну да тут с терминологией стоило бы разобраться Потому что есть процесс есть поток есть гн тред вообще так не то чтобы она была очень формализованной устоявшейся терминологии но есть какое-то общее понимание что процесс - это некая более тяжёлая сущность а поток - это какая-то более лёгкая сущность Прим там есть шаная память между потоками а что касается грев вот процессы и потоки они работают в пространстве ядра а Грин среды работают в пользовательском пространстве то есть доступны напрямую разработчику прикладного софта и с этой точки зрения это конечно Грин среды потому что виртуальная машина работает в пользовательском пространстве не делает никаких си сколов к операционной системе чтобы заниматься этой многопоточность вот а с точка зрения разделяемой памяти это вки потоки а процесс разделяемой памяти нет значит это процесс в потоках есть разделяемая память и поэтому везде в документации во всех книгах по Ирлан оно это называется процесс да да то есть и очень важно тут не путать Потому что когда вы читаете Ирлан Лан весь построен на запуске процессов причём речь идёт там сотни тысяч там миллионы процессов Вообще легко потому что по факту это вытесняющая многозадачность на уровне самого виртуальной машины и она супер эффективная то есть там их можно запускать реально в гигантском количестве и и при этом оно кстати насколько я тут знаешь мне даже немножко стыдно Я уже забывать начал Да но Ирлан ведь один из немногих языков который просто утилизирует очень эффективно все практически ресурсы и это было ещё тогда Угу Да тут дело вот в чём виртуальная машина она представляет собой ну как бы полноценную операционную систему она делает то же самое что операционная система то есть там шедуле которые управляют потоками там управление памятью там управление и сетью Вот она получается некий такой виртуальный контейнер который работает поверх поверх Хоста родительской операционной системы Да она резервирует у родительской операционной системы оперативную память запускает там шедулер по количеству ядер которые существует и уже этот шедулер на каждом ядре на каждом железном идре которое ему доступно он уже внутри себя создаёт эти процессы виртуальной машины и управляет им эффективно это получается потому что они умеют как бы балансировать нагрузку то есть во-первых они достаточно мелкие эти процессы то есть Их достаточно легко переносить куда да то есть ну куда с одного шелера на другой если у нас одно ядро загружено на другое проставит то можно перенести часть работы с одного на другое ядро вот и получается что эта виртуальная машина Она умеет балансировать нагрузку по всем доступным ядрам и эффективно их утилизировать Вот и похожая ситуация с памятью Да она забирает у Хоста операционной системы большие участки памяти уже внутри себя более мелкими порциями ими управляет вот поэтому когда кто-то снаружи смотрит там через средства операционной системы на потребление цпу памяти то хватается за голову ай-яй-яй У нас тут ВС захвачено ресурсы использованы и так далее на самом деле они просто зарезервированы виртуальной машиной и уже внутри себя виртуальная машина распределяют как надо то есть смотреть на ресурсы снаружи неправильно смотреть вообще Ирлан конечно не просто опередил своё время вот своими такими подходами Да знаешь есть даже вот эти шутки что был распределён ещё до появления интернета Да И вот там мно Так это не шутка Это реально там есть е один интересный элемент то есть понятно е не было них докеров не было вообще вот ничего такого что сейчас существует и фактически ин Сам в себе всё это имплементировать

может он и сейчас существует который позволял собственно запускать Илан прям без виртуальной машины и была идея о том что мы фактически можем на каждый запрос просто стартовать вообще с нуля свой собственный Лан за какие-то миллисекунды и ты получаешь полную изоляцию Да был такой и даже не один такой проект был там да то есть когда Да Точно Да когда вот на обслуживание какого-то поступившего запроса там ХТП прямо стартует виртуальная машина обслуживают его и так далее получается очень дурно можно нарезать все ресурсы таким образом да да Если я не ошибаюсь там что-то 100 миллисекунд что ли Старт занимал всей этой истории но это была своя отдельная имплементация этой реальной машины этой виртуальной машины то есть это не обычная виртуальная машина Илан своя её реализация которая поддерживал язык интересно вообще уровень развития что язык в принципе на ну как бы это не просто язык да это целая платформа можно сказать а сейчас просто наверное это всё чуть-чуть неактуально стало потому что мир разделился да то есть эти вещи ушли на другой уровень То есть у тебя там где-то докеры кубернетес поделили Ну да сейчас как бы решают эти проблемы с помощью кубернетес Но это как бы весьма сурово по отношению к ресурсам там где ты в ланге ре статуе какой-то легковесный процесс и займёт это микросекунд здесь ты буде стартовать лый узел тушить виртуалку поднимать это очень безжалостны к ресурсы про Какой ещё Аспект хочется поговорить про вот эту горячую замену кода то есть одна из идей которая И вообще прикольных штук которые есть в ланге это реально горячая замена кода Вот расскажи пожалуйста в двух словах как она работает Понятно зачем это было надо эриксону есть у вас есть коммутатор к нему подключены пользователи раз вам надо накатить обновление софта И как вы же не будете прерывать телефонные разговоры вот поэтому была реализована такая система что вот подкладывают новые бинарник новый байт-код и виртуальной машине даёт команда она начинает эти Новые бинарки подгружать и переключать соответственно работающий процесс со старой версии кода на новую версию кода с миграции там какого-то состояния в память если надо оно Конечно надо вот и таким образом в пределах вот двух версий старая новая этот переход осуществляется гладко Вот ну как гладко это теоретически гладко на практике оно конечно не так-то просто это реализовать Я уже упомянул что надо мигрировать состояние процесса там какие-то изменившиеся структуры данных Вот но там ещё есть дерево процессор которые управляется супервизора если в этом дереве есть какие-то изменения то их тоже надо как-то запрограммировать чтобы они произошли потом всё это надо протестировать И так далее Вот то есть процесс непростой на самом деле и поэтому часто это горячей заменой кода не сильно пользуются потому что ну если у вас есть кластер и вы научились там переживать падение узла то вы просто погасите узел поднимете новый узел с новой версией кода введёте в кластер и так далее вот тут остаётся всё равно проблема что у вас получается в кластере узлы которые работают с Разно версие кода то есть узлы разных версий вот бы проблема Не специфичная для иланга поэтому подходы есть она решаемая в основном люди действуют Так ну или вообще не заморачиваться просто делают датам там гасят поднимают да А где вс-таки полезна горячая замена кода это именно вот у разработчика на локальной машине когда он этот код пишет да то есть у вас система Поднятая работает в терминале вы с этим терминалом можете взаимодействовать

новый код написали тут же себе в этот шел погрузили его без потери состояния без потери каких-то данных там у себя и этот новый код продолжаете запускать это очень удобно именно для разработки Ну жури любят про это говорить Да что у них реп всё автоматическое Ну да врлан хорошие Были времена скажем так то есть типа фича сейчас уже не такая актуальная Но действительно она позволяла конечно Чудеса творить и при этом явное описание того как конвертируется состояние Да из старой версии в Новую соответственно это всё при загрузке происходит это конечно космические технологии скажем так просто сейчас Ну действительно обогнавшие своё время да да обогнавшие своё время сейчас понятно что на уровне узлов там открытые схемы поддержки обратной совместимости по структурам Там и так далее но это действительно уже общие подходы которые используют все и поэтому тут особой никакой проблемы нет уже более-менее отработано То есть я правильно понимаю что сейчас просто действительно коммутаторы

там Ой я не могу сказать что там в телекомах с коммутаторами я там на самом деле никогда не работал Угу Ну другие там проекты где я работал там либо датам либо вот миграция кластера черес погасить ноду поднять ноду Я кстати Помню был какой-то знаешь в Вике статья на тему само долго живущего софта и там чемпионом как раз был ланговский какие-то аски которые там типа 50 бе работают или там больше даже Ой ну не 50 Наверно это я вру конечно но там вот как раз вот типа со врем когда он появился там до сих пор они работают и не текут по памяти какие-то чемпионы были О кстати текут по памяти ещё одна прекрасная фича виртуальной машины это именно прикольный сборщик мусора вот он Дело в том что он свой для каждого процесса вот А поскольку процесс легковесный памяти Уго мало СБО мусора на м отрабатывает быстро Вот и у разных процессов эти сборщики срабатывают в разное время поэтому это очень отличается от того что в жава мире когда там остановка ПВО вся виртуальная машина собирает огромную кучу памяти здесь как бы это всё нареза на маленькие маленькие кусочки каждый кусочек у себя работает и получается э

никогда и он действительно очень эффективно работает равномерно у тебя нет вот этого зигзага когда у тебя там сборка всё встало но там есть ещё нибудь интересное то есть Ирлан Горская модель с акторами которые мы сейчас вообще отдельно будем разбирать с тобой отдельным блоком Да она же концептуально достаточно прикольная и её помнишь было время когда многие пытались имплементировать её в своих языках и повторять то есть например ака в скале Ну в других там какие-то менее популярные но всё-таки были и Даже несмотря на то что Они пытались имитировать Ирлан модель есть типа физические ограничения которые обойти невозможно одно из них как раз это полная остановка потому что как бы ты там не

реализовывался технология была помнишь популярная очень Ну да а какое-то время была на слуху не знаю как там сечас мире ну Скала в принципе сама как-то немножко пошла да И тем более сечас скорее ассасинка авей Тами вот всем этим остальным там подходы в принципе к асинхронность Они поменялись и так более-менее кстати стали Наверное я сказал бы единообразным что ли Сквозь все языки Вот и в этом смысле Ну какие-то Бест практики выработались и распространились по всем языкам Ну да да причём Кстати всё равно мне хочется сказать Вот те кто на эрланг не писал Если да всё равно концепция ланга вот у меня кстати даже недавно было подкаст по поводу там пайтона да И вот мы общались и собственно обсуждали что Несмотря на то что там тусин койты есть ещё что-то всё-таки ирландская модель настолько классная мне даже вот прямо реально обидно да что она не стала

мейнстримом современными фишками как бы попроб Лан не то что не возникнет ощущение что это что-то из прошлого Наоборот я готов поспорить что для большинства это будет выглядеть как космос потому что пробуйте Эликсир у вас не будет такого ощущения что это из прошло ну как синтаксис языка Да но сама вот концепция Да с процессами это конечно Вау это очень-очень круто И это вообще не тоже самое что есть в го очень сильно отличается но опять же сейчас мы тоже про это поговорим Вот и Тут ещё знаешь как хочется такой переход сделать То есть в ланге В чём ещё прикол он же тоже не то чтобы быстрый язык то есть определённые вещи он делает крайне медленно там например число дро билга из него явно плохая Да вот кстати давай прям Лер ещё немножко Но в отличие от например вот мы берём какой-нибудь го мы берём все эти однопоточный но асинхронные да системы если мы там начинаем разбирать Джейсон парсить или ещё что-то то пиши пропало потому что у тебя луп соответственно блочит и мы сидим и ждём если там нет какой-то хитрой Вот там отдать в тред Может быть как-то там дополнительно соответственно явные команды для этого в ланге реализована настоящая вытесняющая многозадачность То есть получается фактически насколько я помню это реализовано через тики То есть каждый каждое исполнение в рамках процесса это некий такт который считается машиной внутри И даже если мы в рамках процесса начали обрабатывать какую-то Мега J на 5 мегабат то нас всё равно виртуальная машина кикнет и уберёт там куда-то чтобы мы не мешали выполняться всему остальному коду и вот это вот Поистине уникальная для туки которая полною автоматически ВС распределяет даде ему остановиться и передать управление а шедулер снаружи принудительно останавливает процесс когда считает нужным и это и есть вытесняющая многозадачность и это позволяет гораздо лучше Вот контролировать ресурсы избегать блокировок дада да то есть невозможно выполнить такой код который всто пант Вам выполнение всей машины то есть это всегда будет локальная штука для конкретного процесса неважно вы там на а зависли или вы там считаете числа да у вас вам скажут спасибо количество тактов там именно Фишка в количестве тактов То есть это не время да Ну там кш есть такая единица работы и да считает эти вот редак да это очень ребят круто кто говорю для кого это вот Новая тема Я очень советую копнуть потому что Лан и раньше опережал в своё время и до сих пор это вот прямо особый мир который очень классно придуман и классно работает и остальным в принципе туда не пойти по той причине что тут оче много на ИМП виртуальной машины просто у остальных оно не такое они никогда в жизни н повторить не смогут в этом смысле теперь хочется сказать следующую вещь в ланге Вот я как раз сказал что число дробилка неэффективная При всём при этом Да там производительность маленькая но он Помнишь там вот эта история то что он очень плохо например работает со строками потому что там никаких строк вообще не было это не веб Да и Ну это уже не актуально Сейчас сечас как бы унид поддерживаться хорошо и поняти это унид и всё это есть работает Ну я имел в виду скорее с точки зрения стандартной либы количества там функций вот вообще именно стандартная библиотека Да не сильно богатая в плане работы там со строками какой-то там хитрой с питона там даже простейшая операции это всегда была проблема но что там точно было хорошо Я просто к чему это веду это как присказка да то что с помощью ланга вообще-то постоянно занимались парсингом разбором пакетов Да которые там т очеред ориентирован на бинарные протоколы и на на разборы на бинарных протоколов и здесь он Очень эффективен Я бы даже более того сказал Ланка - это по сути парсер наверное один из самых эффективных парсер бинарных протоколов потому что с его помощью можно описать именно декларативное что очень важно то есть вы не просто такие там я возьму там я не знаю там вы начинаете прямо разбирать по кусочком вы имен специальный синтаксис под множество языка специальный синтаксис работы с бинарными даны Как эффективно извлекать от них какие-то осмысленные вещи Да чтобы вы понимали мы говорим про по сути про паттерн матчинг но это не просто паттерн матчинг данных в вашем языке Когда вы там не знаю массивы там разбираетесь идёт про то что вы прямо берёте данные пришедшие вам по вот в бинарном виде и прямо их раскладывается на элементы и вот тут я могу обманывать помнишь э Господи как же этот называется парсер Я знаю что Лев придёт может быть в комментарии нам уточнит который он написал 1 да Он называется 1 Да наверное один из старейших этих бинарных форматов описание данных в бинарном виде Да в ланге он да хорошо реализован по-моему Лан вообще чуть ли не единственный там их там всего несколько имплементации ин - это один из немногих имплементации этого формата который Может его парсить вот так вот из коробки Да это очень красиво выглядит Я может быть думаю какой-то кусочек кода будет приложен будет видно как вобще без проблем без боли по кусочкам через пате Вот такая вот красивая штука перед эликсиром то есть вот мы уже в принципе обозначили у нас была проблема работа со строчками и для Веба конечно это было мягко говоря неудобно Хотя в пятнадцатом году на Ирлан я вот замутил код Батл наш Да и он вполне работал Но конечно ты такой Блин ну для Веба там есть определённые моменты которые надо самому додумывать команда

не сильно заинтересованы в сторону Веба двигаться у них как бы другая предметная область сообщество Да делало усилия написаны там веб-сервер хороший эффективный были попытки делать какие-то фреймворки Вот но всё-таки язык недостаточно гибкий для того чтобы делать фреки Вот похожие там или на что-то [музыка]

такое вот Лан всё-таки не завоёвывал Ну например там никто не занимался Вот знаешь что меня лично всегда напрягало полное отсутствие попытки улучшать девелопе Experience у тебя ненормального сборщика работы с зависимостями ребята всё делают на йк файлах и говорят А что ребят файл классно смотрите у нас всё работает и у тебя каждый раз эти свистопляска Помнишь там были да такого смешны смешного уровня проблемы когда для того чтобы тебе фиксировать зависимости ребята форли все зависимости и складывали их к себе для того чтобы что-то там не ломалось ну в общем есть три зоны так делать и в некоторых ситуациях это подход до сих пор считается хорошим Вот но да с точки зрения Тулин особенно по сравнению с другими более популярными языками там было Всё достаточно плохо Вот вот когда уже появился Эликсир и все стали смотреть на Тулин экси ужели повторять что такое для Илан тоже чтото появи стегнуть дедов Да да да оказал влияние в обратную сторону Ланки и что-то да что-то было сделано Давай просто перечислим что такого вообще в Эликсир было добавлено Потому что если вообще глобально брать Да Многие же вообще скептично к нему всегда относились потому что говорят ребят Ну это же по сути та же самая виртуальная машина то есть фичи то все те же самые и смысл он никуда не делся то есть то ради чего мы выбираем Ирлан А вот эти все свисты переделки особенно Там жаловались многие на мета в том Мак лаши очень сильно помню жаловался что ну это отладки не добавляет вообще-то удовольствия а жить-то и без этого вполне можно да Значит Эликсир Он полностью построен на макросах Вот можно сказать что это некий такой макро процессор очень мощный который настроен на Ирлан Но это дало и плюсы и минусы плюсы в том что это гораздо более гибкий язык который позволят более сложные абстракции делать более высокоуровневый код писать и да получать вот такие вот до уровня Руби конечно он не доходит своей гибкости и выразительности но по крайней мере гораздо ближе к Руби чем Подошёл к рубе Чем это можно было бы ожидать от эрланга Вот Но да у тебя как бы появляется лишний слой абстракции между кодом который ты написал и кодом который выполняется в виртуальной машине потому что

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

вот какая-то сесия откры запрос прил какая-то структура данных памяти сохранилась Можете консолью зайти дёрнуть какой-то вызов функции получить эту структуру данных себе консоль в виде там Ланской структуры данных посмотреть её там вот это активно применяется для отладки там в сложных ситуациях на продакшене так вот если мы говорим об этом ниме кодом в эрем

вст с этой кон на продакшена большая и вам надо понимать что там эти макросы нагели Чтобы понимать Какой код вам доступен в этой консоли то есть абстрагироваться от ланга в эликси не получится а ну вы имеете дело уже с лагом вы написали код на эликси А когда вы зашли на про в консоль там вы имеете дело с Ну я просто помню тоже да там тропа довольно много было И надо туда-сюда ходить это осталось теб выть э зна при этом не получится Ну смотри это же зависит от сложности проекта да далеко не все хотят идти на проты в консоли отлаживать есть же там в индустрии более известные способы там распределённая трассировка метрики в фане просто логи погреть как бы вот эти вот традиционные все штуки Да то что у ластов есть такая ф эки про не может даже и не знают подавляющем больши такая воз есть вот если вы там Пите веб проект там какой-нибудь то и он у вас и не кластерный даже у вас там Один узел работает на проде то Ну традиционными средствами там в фане посмотрел В Киба там логи поискал Ну и всё хорошо В этом плане Кстати я так скажу что вот когда Эликсир появился у нас вот есть проект ко Basic Да это вот основа языков в браузере бесплатно там все дела многие про проек слышали Я же первую его версию написал раз на фениксе это собственно фреймворк на Эликсир который Аля аналог Rails грубо если говорить Я как раз тогда его изучал Мне он зашёл потому что там реально есть несколько классных идей которые вот редко я встречал фреймворке которые вот что-то такого особенного вносят что рельсы не придумали Классно да и там вот например действительно есть несколько таких концепций одна из них - это работа вот с Мидл варми как она сделано лучше чем где-либо я вообще видел и что меня тогда поразило то есть если ещё до этого момента когда мы на иланг писали там как раз много было знаешь такой прямой работы Если это особенно чистый веб там много было работы прямой с вот акторами да то есть ты прямо вот эти процессы вот тпшка все дела Это вот когда мы особенно код батли там что у тебя там прямо реально игра там процесс взаимодействие между ними а здесь у тебя более-менее классический веб и я удивился то что вот эта вся Ключевая фишка иланга она полностью скрыто там то есть у тебя есть фактически классические просто обработчики там запрос пришёл ответ все дела и в принципе если ты специально усилия не прилагает ты даже и не поймёшь что там под капотом такая машина работает для того чтобы обеспечивать Тебе вот всё что ты хочешь ну да в общем-то Эликсир разработчику в общем-то и не приходится иметь дело с утп фреймворка потому что уже там настроенный построенный абстракции поверх него он уже работает с ним То есть фактически Да можно по большому счёту писать на нём как просто на нормальном функциональном языке

прони Ну да если тебе не нуж какая-то многопоточность сверх того что уже есть в фениксе Да ну там Просто каждый пользовательский запрос там обслужи в своём потоке ВС если сверх этого тебе ничего не надо то и не надо и вс просто работае А ты кстати с фениксом работаешь на эликси Да и как тебе Ну на самом деле мне см

не имел дело поэтому это как бы мой первый фрейр с которым я вообще имел дело поэтому Ну да в сравнении с тем что какой веб я делал на ланге это конечно Небо и земля Ну в этом плане Феникс похож Ну как бы на все классические фреймворки в этом смысле там есть свои особенности Давай немножко поговорим про язык а потому что вот мы про утп несколько раз уже сказали вообще вот именно про синтаксис про всякие фишки которые там есть я бы с лёгкого начал да то есть одна вещей которую и ты испытываешь просто какой-то Безумный кайф когда работаешь это пайплайн который которого не было в ланги его очень сильно не хватало и в Эликсир его добавили и причём Кстати когда его добавили после этого даже вот пропол в два скрипте Они во многом стали базироваться не только на шарпе там то что из Шарпа было они начали ещё Эликсир показывать говорит смотрите как классно и чуть ли в эту сторону мир не пошл Да когда у нас если у тебя нету значит этой цепочки фун в объектном стиле да то просто писать вызовы функции внутри вызовы функции превращается в ват у тебя такой типа вложенность матрёшка Да и па позволил это всё просто в такую цепочку Я подозреваю что у тебя код наверное не знаю на сколько процентов из

пайплайф и рядом везде это самой глав главная операция это вообще фишка функциональных языков Да фишка для многих функциональных языков характерна там и в ке есть и Акам она есть вот в с она есть что врлан нету да но это очень действительно очень круто очень удобно дело в чём Когда вам надо вызывать вот вызвали функцию получили результат с этим результатом вызываете следующую функцию получается новый результат с ним вызываете следующую функцию вот у вас получается там промежуточные переменные Либо вы эти функции там друг дружку заворачивать и это получается Ну просто вывернута в обратную сторону М надо справо налево читать что происходит вот а он как бы позволяет специаль опера одно функции направит на вход в другой функции собственно в ше ом имеет дело как бы тоже так работает и сделать такую цепочку Когда у вас просто нет никаких промежуточных переменных а просто вот функции соединены друг с другом и вс Очень красиво Очень читае очень удобно это примерно как цепочка которая такая

обм представи что вместо точки у тебя такой просто специальный символ и при этом нет никаких объектов то есть Это просто функция через который такой протаскивать данные типа пропустил пропустил пропустил и на выходе что-то получилось но кстати в этой штуке бывает иногда неудобно отлаживать потому что у тебя надо Ну посмотреть какой-нибудь промежуточный этап и тут удобно Есть средства удобно туда можно вставлять специальные специальные функции инспект есть дбг есть которые как бы примут результат покажут его и передадут дальше в почки всё удобно да-да Да я хотел сказать что это скорее на инструментальных средствах каких-то дополнительных потому что вот я знаю под Джаве в редакторах есть такие фишки которые как раз позволяют тебе а посмотреть А что там без необходимости переменное фигари и ты можешь посмотреть промежуточный результат короче пайплайн - это очень классная штука и есть кстати ещё что-то такое кроме вот просто я сейчас перед акторами думаю есть что-то ещё обсудить Ну и макро свис так как тоже такая Киллер фича Да макро сфс когда у тебя эти функции не просто в цепочке А там есть с ветвление да Если результат такой Вызови то Если результат другой Вызови другое и таких ветле у тебя может быть там три-четыре уровня в ложности Да вот есть макро свист который эту проблему решает Ну тут на пальцах не расскажешь надо код показывать То есть ты хочешь сказать что в этой цепочки ты ещё можешь без хаков нормально описывать ветвление и у тебя нормаль Ну если ты знаешь Хали Что такое нотация Вот то он как бы достаточно хорошо е Элит прикольно О'кей давай поговорим наверное всё-таки Вот про центральную часть про которую мы много сказали уже Да вот что есть акторы что есть многопроцессорность получается а не совсем многопоточность Я думаю надо это отдельным блоком прямо людям рассказать потому что это вообще не очевидно Как работает Понятное дело что даже если мы что-то с тобой расскажем пока не попробуешь написать код не не получится потому что эта тема относится к тем которые прямо ломают мозг не очень сложно кстати потому что бывают вот вещи Хали которые сложно ломают мозг там охренеешь Да чтобы это осознать это не очень сложно но ты после неё вообще как бы у тебя как будто ты мыслить по-другому начинаешь такой заржавевший мозг поправил и такой Нифига себе как в принципе можно на кот смотреть и как можно его компоновать и как можно о нём думать то есть Вот это конечно актор меняют сознание мягко говоря почище чем некоторые вещества потяжелее Да давай про это попробуем рассказать насколько у нас получится с тобой подожди про ОТП или проктор это немножко к вообще да и ОТП мы сюда притянет с акторов да то есть вот э концепция написания в актора Да что это вообще такое как это вообще хорошо вот Джо Армстронг один из создателей языка Ирлан и автор одной из первых книг по Ирлан рассказывал так вот как взаимодействуем мы люди вот у меня в голове есть какая-то картина мира Вот и я взаимодействую с тобой каким способом я передаю те устную информацию те передаю какие-то сообщения принимаешь эти сообщения и как-то на них реагируешь или игнорируешь это уж твоё дело Да ты в зависимости от того что от меня получил можешь как-то изменить свою картину мира у себя в голове можешь совершить какие-то действия или проигнорировать а потом ты можешь мне ответить или не ответить вот ровно так же и взаимодействуют между собой процессы в Ирлан у него у каждого процесса есть своё состояние там своя область памяти где он хранит какую-то информацию когда процессам надо по взаимодействовать один процесс отправляют другом сообщение другой процесс это сообщение получает и решает что с ним делать он может по этому сообщению изменить что-то в своём состояни он может выполнить какие-то действия он может проигнорировать потом может ответить или не ответить вот собственно на этом и построено всё меж процессорное взаимодействие в ланге и это и есть модель акторов То есть актор - это вот процесс который Ну актор - это некая сущность которая самостоятельно в своих действиях и имеет там свою собственную память свою собственную информацию вспомнил опять же поскольку я давно про ирланд не разговаривал у меня из головы вылетела вот э вот известная Легенда Ну наверное это не легенда всё-таки да о том что Армстронг он был биологом изначально Да он там PHD по-моему Да по биологии и я помню вот эту историю о том что он представлял собой когда он думал об этом он думал как многоклеточный организм в котором каждый выполняет свою роль Они между собой взаимодействуют Но у тебя как бы мощь получается за сч композиции большого количество вот этих независимых маленьких штучек которая живёт сама по себе и может принимать решения и В каком-то смысле он придумал Ну не то что придумал понятно что тогда это уже было В каком смысле но я имею виду фактически он представлял собой представлял себе взаимодействие этих процессов как взаимодействие узлов компьютеров в интернете интернет но внутри одного языка у тебя много машин ты можешь вот так вот между ними обмениваться Каждый делает какую-то свою задачу и соответственно каким-то образом всё это управляется координируется и получается результат Да это всё похоже если мы возьмём тот же самый кубернетес кластер Да там есть узлы которые у каждого узла своё состояние своя память они обмениваются друг с другом информацией как либо синхронными запросами там по какому-то протоколу ХТП не ХТП либо синхронными сообщениями через какой-нибудь медж брокер Вот и каждый узел Да принимает эту информацию как-то на неё реагирует как-то отвечает вот это как бы всё очень похоже просто в другом масштабе то есть врлан это всё Микромир А здесь такой макромир из огромных сущностей Ну тут Правда единственное надо всё-таки Уточнить что когда ты говоришь про курне там есть два уровня там есть уровень транспортный Ну такой как бы системный когда они взаимодействуют на уровне решения своих задач чтобы они просто функционировали А есть апликейшн да когда они там взаимодействуют То есть когда мы говорим всё-таки про Эрлан мы говорим Ну и в ланге тоже есть два уровня есть как бы системные сообщения которые позволяют реализовать вот эти вот самые супервизор и построить дерево супервизора падение процессов есть уровень прикладной где мы реализуем какую-то прикладную логику через эти сообщения Я наверное хотел бы привести пример для того чтобы люди поняли что имеется в виду на код Батле потому что код Батл это классная штука где чётко Было бы понятно почему и что именно как реализовано то есть Вот например мы берём код Battle тут кстати стоит ещё Уточнить что с точки зрения аке является одним из тех языков которые собственно вот по его пониманию это и есть настоящее ооп помимо раннего смал толка он относил его к тому что да это типа имплементация похожих идей Да вот передачи сообщений Там и так далее и в этом плане это действительно так когда ты вот смотришь на реализацию того же самого код баттла потому что там как раз ты такую шь Блин я реально объектами мыш а объекты - это акторы И вообще как бы как будто всё складывается и действительно там так реализовано значит в двух словах напомню людям кто не знает код Батл - это проект хекслет в котором Э вы пишете код решая какую-то может быть алгоритмическую может быть Не ну задачу и вы играете как в игре PvP это называется Да вы одновременно видите друг друга код Там могут быть ещё спектатор и кто быстрее как бы пройдёт ассеты тесты и каждый может причём выполнять задачу Хоть она одна и та же Но на своём собственном языке Ну и таким образом вы как бы играете она прикольна тем что в отличие от просто решения на каком-нибудь Лид коде У вас есть realtime с другим человеком когда вы когда вы прямо здесь прямо сейчас это видите это добавляет очень сильно стрессового состояния То есть вы как бы испытываете Адреналин кайф как-то реальных игр и поэтому такой формат для многих гораздо более привлекательный чем тупо сидеть на лед коде соответственно решать задачи у нас даже там есть боты мы записываем чужие игры они потом проигрываются и так далее так вот как это собственно с точки зрения актора выглядит То есть например когда я стартую игру то есть что такое игра игра это некая штука имеющая своё собственное состояние и вот если мы это как бы мапи на базу данных у нас примерно так и будет Да у нас там табличка будет соответственно будет игра у не некий йт и вот поскольку это всё поскольку это живёт в памяти То есть это не просто там слова это на практике так потому что вам нужно же взаимодействовать с этой игрой там есть игроки то игра действительно представляет собой актора который находится живёт в памяти и это по сути некий конечный автомат который там реагирует там там например подключение игрока игрок - это тоже актор который там приходит к туда и соответственно там у игры может запрашивать состояние может говорить я там сходил и так далее и актор в свою очередь в смысле сама игра например сходил один игрок он говорит о значит всем кто подписался ко мне там или остальные игроки получите информацию там о его ходе и так далее и получается Вы реально начинаете смотреть не просто на систему вот таким образом что у вас вот есть игра их вообще-то много каждой игре подключены люди причём не только плееры но и спектатор которые просто могут смотреть эту игру и видеть всё что происходит там есть чат Там есть код там есть выполнение проверок оно ходит на кнд все дела И при этом Эта система Вот именно в таком виде живёт реально в в памяти и они вот так вот между собой То есть получается что у вас frontend интерфейс вот к памяти внутри живут вот эти вот объекты и эти объекты между собой вот так обмениваются То есть это не классический запрос ответ в стиле типа обработчик да обработчик вернул http там ответ и всё умер Нет он как бы этот обработчик достаёт соответствующего актора его можно найти по определённому пиду там прямо есть этот идентификаторы И говорит ему там например вот плеер о сходил всё запрос закончился а актор живёт и вот у вас как бы внутри в памяти вот много такого добра и оно опять же независимое оно софт реалтай оно хорошо работает там под нагрузками хорошо скели и так далее и так далее и так далее Вот примерно так это действительно прямо работает внутри и Например если я запустил одновременно 100.000 игр Ну как минимум будет 100.000 процессов запущенных вот игр и ещё там по процессу но есть ещ служебные процессы Вот например на главной страничке там вводится список открытых игр то есть опять же вот это мышление Да Окей А что такое список открытых игр где он должен вообще находиться в реально в реальном времени это тоже актор То есть это некий специальный актор который когда открывается каждая игра она регистрируется у него и он у себя держит там список этих игр и соответственно выводит При запросе Ну там у него спрашивают он выводит ты мне напомни стаю ши ВС Но получается

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

что во-первых нам не надо хранить это в базе и на каждый запрос там от клиента что-то из базы читать писать это всё прямо оперативной памяти и нас никто не ограничивает в масштабе мы можем поднимать этих акторов там большое количество сотни тысяч вот в одной виртуальной машине дадада это всё ещё распределяется то есть получается супер эффективная система То есть например если вы писали ровно то же самое Там даже ногой или там на ноде или не знаю ванвей на каком-то другом языке вы бы всё равно скорее всего были ограничены одним ядром и вы бы такой скейлинг не получили для того чтобы нормально работать а здесь это просто из коробки и работает вообще просто отлично в реальности Кстати я же пока рассказывал я вдруг вспомнил мы вот говорили про то что там редукции есть да и у тебя есть вытесняющая нормальная многозадачность мы забыли сказать что одна из вещей которая характеризует Лан чётко это же как раз так называемый Soft realtime то есть когда у тебя время реакции он всё-таки не Хард он софт это немножко другое Да но всё-таки Time То есть вы не можете прям поставить колом систему таким образом что у вас что-то не будет обработано то есть оно будет обработано просто само среднее время обработки может быть увеличено да да будет обработано за предсказуемо время благодаря вытесняющие многозадачности благодаря вот этим особенностям сборщика мусора про который мы говорили что он тоже не блокирует особенностям ИО которые там тоже не блокирует там каких-то вычислений вот благодаря всему этому нигде нет блокировок И у нас есть предсказуемо время обработки запроса это кстати говорит о том что в теории Лан до сих пор я когда говорю Лан я в первую очередь машину имею в виду потому что на поверх него есть даже липо образные языки есть есть несколько языков поверх этой виртуальной машины есть гм есть [музыка] там есть там ещ что-то наверное их там наберётся может с десяток но такие которые реально применяется продакшн два Алан Эликсир Да я просто что хотел сказать что благодаря вот этой вот софт реалтай мости такой особый который Ну можно сказать практически Больше нигде нет может и есть но это нас поправят ребята в комментариях а можно сказать что скорее всего существуют задачи для которых н всё равно подходит лучше как ни крути именно вот за счёт этой особенности Да там где нам у нас есть большое количество клиентов которые подключены долгоживущий не короткий запрос это это сессия которая там длится минут там часы и так далее и этих сессий у нас много и через них клиенты взаимодействуют в реальном времени вот для таких систем очень хорошо подходит Ну мессенджер Да что не пиши получается мессенджер Угу угу да и ещё одна интересная вещь что по сути я помню когда вот учил даже Ирлан это наверное первый язык на котором Я очень мощно ощутил представление использования всего в виде конечных автоматов потому что тебя например вот эта игра Да вернусь немножко кот Баттл Вот например у тебя запущена игра да и с ней идёт некая коммуникация а то как с ней можно взаимодействовать зависит от того В каком оно состоянии находится потому что например если у тебя подключился только один игрок а второго ещё нет то попытка например сделать ход ни к чему не приведёт потому что он скажет А типа где второй игрок соответственно если у тебя игра закончилась и попытка делать ход тоже ни к чему не приведёт потому что Игра уже закончилась поэтому получается что у тебя глобально там так прикольно устроено что как будто сам вот этот вот актор - это некий конечный автомат который некая функция которая когда вызывается входит в режим ожидания запросов и вот эти запросы делятся по месседжи которые фактически соответствуют его текущему состоянию А потом когда она обработана она рекурсивно сама себя запускает и может перейти в другой набор сообщений которые она отвечает в зависимости от того В каком оно сейчас находится в состоянии ну и соответственно будет давать правильные ответы и в этом плане конечно у тебя получается сумасшедшая Вещь Вот как вот в Руби мед Мисин называется да то есть когда у тебя полная динамика у тебя любой актор может изменить полностью свою реакцию вообще ну вот просто потому что он перешёл в какое-то новое состояние Ну вот как раз повод перейти от модели акторов КТП фреймворк Вот потому что модель акторов - это базовая функциональность процессы отправка сообщений почтовый ящик память реакция поверх него уже выстроены сущности которые более высо уровне а именно гевер супервизор и как раз вот конечный автомат современный Вот и они построены на этих низкоуровневых операциях отправки сообщения чтения сообщений реакции на них Но они уже представляют более жёсткий типа сделать синхронный запрос сделать асинхронный запрос обработать его изменить там сво состояние так эк Вот и конечный автомат имен как суно тоже присутствует Ну генсвет автомат Ну генсвет как бы очень простой конечный автомат как бы вырожденный случай его да А есть конечный автомат именно как конечный автомат где ты описываешь разные состояния Какие переходы разрешены Какие не разрешены вот это вот всё да тут наверное одна из не более формальное описание конечно автомата Чем именно Ген сеера Угу одна наверное из необычных вещей вот которые необычная для гошко которые Ну пытаются сравнивать то что в ланге процесс - Это не просто там функция запустил Да и что-то там происходит у тебя фактически вот эти все узлы они не не запускаются под узлами Я имею в виду процесс они не запускаются Да они не запускаются в вакууме дада да у тебя как в операционной системе строится м То есть первый запущенный там Я кстати не помню это первый запущенный Будет ли это типа главный процесс но смысл в том что при старте там вот этот вот надстройка ОТП она считывает определённую конфигурацию и стартует некий набор процессов заготовленных по некому шаблону и структуре Что например у тебя есть как бы игры в том же Код баттле Да они не просто стартуют сами по себе потому что а вдруг что-то пойдёт не так она например игра упадёт умрёт или там завершится а как мы будем на это реагировать и поэтому там есть такое понятие Как супервизор ровно такой же как вот в операционных системах там как он называется System D например А ну да Угу Да да и работает это ровно тоже самое то есть он ему описываются правила запуска новых там детей которых он порождает а то как он их перезапускает если что-то пошло не так да и как он там если что может их останавливает Ну то есть там есть ещё между ними связи То есть например если ты породил какой-то процесс он при смерти там тебе об этом сообщает и у тебя получается что ты внутри эрланга И эликсира когда ты это делаешь Ты прям ощущаешь себя как ты такой в операционки управляешь вот системными процессами да да Ну я бы хотел про супервизора може чуть позже Сейчас Вернуться обратно к нср Вот ты сказал там Гош думает про процесс как про функцию Ну в общем-то это в плане реализации так и есть процесс это функция которая выполняется Ну пока не завершится она просто актор как сделан э функция Она находится в бесконечной курс она бесконечно вызывает саму себя и состояние храни на сте поскольку у нас там есть хвостовая оптимизация рекурсии то как бы стек не раст И вот оно выполняется просто как бесконечный цикл Вот и внутри этого цикла Она читает сообщение с почтового ящика обрабатывает его там вызывает себя уже заходит следующий цикл уже каким-то изменённым состоянием Вот и собственно Да это просто функция которая находится в бесконечной реку Ну есть рекурсия это кажется рекурсия нам нананы язык который оптимизирован в этом плане Ну на уровне языка на семантике языка это рекурсия А когда код компилируется в байт код он там результатом просто получается бесконечный цикл там в фиксированном объёме памяти Настоятельно он работает Ну и давай тогда про супервизора как раз поговорим то есть вот фактически акторы не запускаются просто так сами по себе то есть они живут в Заранее спроектированных как то есть чтобы тоже не было ощущения что там тако хаотичные такие все эти штуки То есть у вас всё равно программа выполняет какую-то задачу там есть какой-то набор прямо я бы сказал вот эти вот деревья процессов которые друг друга порождают соответственно строится специальная структура из процессов наблюдателей Но это делается не ручками да А через уже готовый фреймворк который называется ОТП То есть это прямо специализированная либо она же стандартная по сути является у нас языком да Ну поскольку они как бы в одном репозитории в одной кодовой базе находится сам язык Ирлан и виртуальная машина и ОТП то можно всё это рассматривать как единую сущность Ну потому что это вот один репозиторий там в системе контроля версии одна команда разработчиков и вот виртуальная машина плюс язык плюс п это всё вместе идёт одним пакетом так сказать ну и соответственно Вот это тот системный уровень о котором мы говорили абернети да когда у тебя есть контроль процессов и в этом в том числе заключается отказы устойчивость То есть например можно задать такие правила при которых если у тебя с актором что-то происходит намер супервизор может знать что вот по-моему правильно я помню Да что там например мне нужно чтобы было живых пять Вот он если умирает он его оп и добавляет всегда в этот процесс и у тебя ещё ну нет там просто ну во-первых дерево может быть статическим или динамическим да И Е там статическое дерево там под супервизора там пять этих процессов воркеров то да там есть политики разные рестарта но в основном Мы один упал мы вот уже Стартуем и обратно получаем эти же пять или один упал мы все пять Стартуем и опять там с динамическими процессами тка посложнее которые надо запускать останавливать вот как бы да и всё верно Это подход к обеспечению устойчивости к ошибкам который противоположен подходу то есть есть

как программирование Да если случилась авария упал поток то как бы всё программа на этом завершилась и чтобы этого не происходило надо обрабатывать все аварийные ситуации вот и продумывать всё что может случиться и для каждого ситуации писать обработку да то есть думать наперёд А здесь мы как бы ну что-то упало Ничего страшного Мы это пере запустим просто заново с нулевого состояния какое-то состояние там потеряется чтобы оно не терялось применить там тоже какие-нибудь свои подходы Вот но мы не будем пытаться заранее придумать всё что только может случиться и написать там код который обработает любую возможную ситуацию А просто вот Стартуем процесс и всё Вот это делает код компакт мы там описываем в коде главным образом happ Pass да то есть штатное его выполнение а всякие Корнер кейз нештатные ситуация мы либо описываем по минимуму там где-то надо либо вообще не описываем и код получается короче и проще за счёт этого Потому что падает только маленький вот этот процессии от политик да Потому что если а он может за собой потянуть там дерево это если как супервизора настроены и как Да это зависит в чём проблема мы рестарт может не помочь Да если какая-то там долгоиграющая проблема нет коннекта к базе данных что-то такое вот то если там есть механизмы что если за определённый промежуток времени прошло какое-то количество рестартов превышен лимит то мы поднимаемся выше по дереву и рестар уже сам супервизор или ещё вышей там высоко уровне супервизор и как бы увеличиваем масштаб этого рестарта один процесс ветка процессов ветка процессов побольше Вот если маленький рестарт не Решил проблему применяем рестарт побольше да Но самое главное То что тебе не нужно париться в конкретном месте о том что если ты сейчас тут краш у тебя вместе с тобой весь процесс упадёт и твой луп заново будет перезапущено уже внешними средствами по отношению что упадёт Ну вот в контексте ко Батла упадёт одна игра то есть там два игрока и их зрители вот их процесс упадёт их состояние потеряется все остальные там 100.000 игр которые одновременно идут в этой же виртуальной машине в этой же памяти с ними ничего не случится они продолжат работать и это даже Забавно Я помню как мы со Львом обсуждали то что вот этот Т краш да то есть не пытаемся обработать это наоборот падает хорошо потому что у нас механизм управления ошибками снаружи по отношению к этой системе и он как раз призван это решать поэтому не надо об этом париться это рождает обратную проблему вот то что ты говорил про например отсутствие коннекта к базе что у тебя настолько живучая система что тебе надо думать не о том как не упасть в смысле как не с ошибками там бороться А тебе надо думать как наоборот остановиться когда не надо работать потому что у тебя система будет работать до упора даже если не надо работать то есть у тебя есть проблема того чтобы затушить систему тогда когда ей не надо работать Да если она зависит там каких-то внешних там систем от базы данных и так далее то Да она должна уметь как бы что-то делать в ситуации когда эти внешние системы недоступны или подводят как-то Я кстати помню там ещё ну сейчас наверное это не очень актуально но всё-таки хочется сказать а Лан же ещё делался опять же Это мы сейчас говорим в рамках одной одного запущенного процесса в рамках машины но Лан распределённой эрланга - это действительно реальность это вы можете запускать его в виде кластера на многих машинах Они между собой коннектятся и работают как единое целое и вы можете слать сообщения прямо нормальные сообщения на процесс который физически находится в другом месте и здесь есть проблема Несмотря на то что в теории вообще эта проблема по-моему вот много с этим экспериментировали в определённые годы и стало понятно что всё-таки как ни крути абстрагировать сеть невозможно Когда вы работаете в рамках одного процесса Ну там всё нормально а здесь У тебя есть определённая деградации связанные с работами tcpip и там получалось так что вот эти по-моему там были такие специальные диспетчеры которые там это перенаправляет в другое место у тебя происходят такие замедления что у тебя система просто перестаёт отвечать нормально и это связано по-моему Помнишь там с изменением окна или задержками да да тайм-аут И вот это всё да надо сказать что Ирлан гов ский кластер он делался в первую очередь не для масштабирования а именно для отказа устойчивости и под конкретную аппаратуру то есть вот эти вот узлы они находились рядом в одной стойке и сеть между ними была хорошей поэтому кластер хорошо работает когда вот в хорошей сети когда ВС рядом и с хорошей пропускной способностью Вот ну как бы да абстрагировать сеть нельзя И если мы будем строить кластеры которые там достаточно узлы достаточно далеко друг от друга находятся то да у нас

там своё преимущество Ну я имею в виду по распределённое приходят к классике по запросам по объединению Там и так далее да ну то есть да то есть вот для команды которая разрабатывал Лан Да он кластер был нужен для отказа устойчивости это как бы три уровня отказа устойчивости первый уровень когда там TR cch мы там перехватывать исключения второй уровень - это супервизор внутри одной виртуальной машины третий уровень Ну надо переживать и отказа железа там да вышел там из строя диск Там что-то там память и так далее чтобы переживать эти отказы нужен кластер и вот он был сделан кластер Мы вот с тобой кстати столько времени про всё это говорим и я такой думаю блин а мы же с тобой не сказали о том а какие супе известные продукты используются и написаны на ланге и на Эликсир и мы ими все так или иначе пользуемся Ну в общем-то рекламной карточкой эрланга был и наверное остаётся WhatsApp потому что рост популярности иланга он чёт связан с ростом популярности Ватсапа Ну и наверное падение тоже связано с уменьшением популярности WhatsApp Да так ну в общем-то WhatsApp и многие другие мессенджеры они пытаются пользоваться именно вот этими возможностями вообще началось всё с jjd То есть первый крупный осор сный проект написано на Ирлан то есть не то что сделано внутри компании Eric для себя а именно Open Source сделано сообществом это бы это именно НР распределённый чат вот с комнатами и так далее потом поверх него стали появляться коммерческие продукты которые Ну либо пытались поверх именно либо делать что-то своё с нуля с оглядкой на то как сде так появился WhatsApp так появился discord Ну discord эликси так сделан и в компании War как бы не только они одни Вот потому что именно вот для этой прикладной области когда много клиентов с долгими сессиями с реальным взаимодействием друг с другом здесь как бы у иланга трудно выиграть на каком-то другом языке Слушай у него по-моему ещё Я сейчас вспомнил с энергоэффективностью какая-то была история Что н умеет очень круто засыпать и вообще в холостую не расходовать ресурсы есть понятие гиберта Да когда процесс неча

он освобождает цпу где-то там архиви оперативной памяти лежит и когда сообщение к нему вс-таки придёт он просыпается поднимается и опять крутит пу Но я честно говоря не уверен потому что в общем-то виртуальная машина к цпу относится достаточно так она крутит В холостых циклах это цпу просто для себ рабо непонятно при это цеп холостых циклах и со стороны операционной системы это выглядит как будто она там Мега занята потому что насчёт энергоэффективности Я не уверен Хотя механизмы там есть напишите ребят кто знает потому что почему-то у меня отложилось в памяти что всё-таки ланге были реализованы механизмы хорошей гибернации для того чтобы максимально устройств потому что механизмы гибернации Да но всё-таки это не про экономию цпу скорее про экономию памяти Ну я имею виду в целом давай так энергию потому что задача быть энергоэффективных которые могут там работать не знаю от батарей сама идея есть что если вот у нас процесс которая функция которая в бесконечной рекурсии крутится если с ним никто не взаимодействует ему никто не отправляет сообщение то как бы и крутиться в этой рекурсии не надо можно остановиться и полежать поспать Окей Ну теперь вот возвращаюсь Значит у нас whata то есть получается что вот видеозвонки мессенджеры это прям его стезя и я помню просто были вот эти тогда написаны народ конечно очень

впечатляли пользователей и команда инженеров какая-то смешная там типа 40 Ну ладно может я обманываю не 40 человек но что-то там очень очень компактное да да это есть можно поискать там в каких-то там четырнадцатых годах рекламные там эти все информацию доклады от WhatsApp Да действительно 30 человек инженеров Да там миллиардная аудитория там какие-то огромные миллионы сообщений Там в час и там каким-то большим количеством железа обслуживается В общем вот это вот масштабирование нагрузки количество пользователей количество сообщений количество данных к железу и к команде инженеров оно в общем-то фантастическое по сравнению с другими языками и Ведь самое забавное как вот мы с тобой ранее упоминали это не решается Просто набором средств инструментальных в других языках потому что у Ирлан есть именно особенности связаные С его машиной с его моде именно виртуальная машина так работает который повторить нельзя то есть либо у вас Ланг либо не Ланг и тогда вы этого ничего не получаете да да прикольно А слушай хорошо А что вот сейчас происходит то есть а опять же вот наш код Батл У меня есть два вот этих вот примера код basics я переписал в конечном итоге с Феникса на рельсу Почему Потому что ну всё равно Несмотря на то что вот вот тогда был рост это прикольно мне реально мне очень нравится и приятно писать но проблема в том что у тебя слишком мало библиотек небольшое коммьюнити и даже простейшие вещи мне Просто бизнес-задачи надо было решать я понимаю что даже для какой-то долбаного было руками писать код хотя ну в вебе не надо для авторизации писать код для типовых проектов Да у тебя в любом нормальном фреймворке есть готовые решения А и поэтому мне например там пришлось переписать м на другую технологию А вот когда про кот Батл идёт речь там больше как бы Корневая логика она не в страничках обычных Да она именно вот в этих плеерах там логики вот этой всей хитрой и поэтому Лан Там подходит просто идеально Ну Эликсир в данном случае и поэтому мы считаем что это было очень правильное решение мы его там используем А вот вообще но при этом в целом популярность она была как-то росла потом что-то встало Да вот что сейчас происходит Ну я те Да я тебе расскажу я расскажу что происходило так десятый Двадцатый год вот этого десятилетия когда популярность была Да вот чем я собственно там в гейминге занимался Да мы переписывали сервисы там ну там постоянно переписывались сервисы там старое поколение Новое поколение вот самое первое поколение веер было написано на питоне потом стали появляться другие языки и многое стало делаться на Ирлан на эликси там и на скале на ра и так далее Вот Но почему это происходило именно из-за экономии железа да то есть у тебя есть определённая нагрузка количество польз количество запросов и система на пито обслужит допустим на виртуальных машинах сть ка Маши потом ты пишешь аналогичную систему на Ирлан и она внезапно работает на двух виртуальных машинах стоимостью 40 условных единиц каждой машины и вот такой вот на порядок сокращения ресурсов и соответственно денежных расходов оно как бы было драйвером к тому чтобы переписывать там с питона сру на Ирлан на Эликсир и в общем-то это вот Деним

там тоже система на Руби которую Ну полностью заместить не удалось но часть её удалось заместить там на Эликсир и выиграть именно вот в железе и в деньгах стоимость инфраструктуры Вот Но в общем-то потом как бы всё захватил кубернетес и никому не жалко ресурсов и денег все арендуют Сколько надо виртуалок на амазоне и как бы всё мы там масштаби и нам на день ле пофиг Сколько надо столько надо и напишем Нару на питоне на ЧМ угодно ещ вот тоже самое что будет масштабироваться выдерживать нагрузки В общем Почему популярность упала потому что в общем-то лучше экономить на программистах чем на железе так получается да мы наймём много программистов и много железа чем мы будем искать этих инстов эликси

инфраструктуру себе Ну тут Наверное имеется в виду в том числе что у тебя куб дал возможность более гибко ресурсами управлять да то есть ты можешь вообще-то погасить легко до поднять если надо и поэтому всё-таки экономия тут будет если ты правильно этим пользуешься Да тут наверное всё-таки не про экономию а именно про удобство разработки и управления инфраструктурой да то есть если ты в мейнстрим то тебе удобно потому что у тебя всегда есть и База знаний и накопленный опыт и специалисты которые всё это умеют Вот и в мейнстрим просто удобнее это делать ну и понятно что если мы от Соединяем ещё и Go который в принципе достаточно производительный то ты получаешь как бы сразу плюсы из всех миров у тебя и быстро Ну да если мы говорим про экономию на инфраструктуре то как бы Go получается Да хороший конкурент лангу Эликсир он эту экономию даёт я в этом плане сказал бы так Лан Эликсир в этом плане наверное вот есть ниши Да специфические в которых они всё равно будут выигрывать там где очень важно при этом быть супер проводите Ну смотри есть как бы инженерные вопросы есть бизнес вопросы инженерные вопросы да такая виртуальная машина у неё такие особенно бла-бла-бла но чтобы продать это бизнесу им проще всего сказать что вот было 20 машин стало две машины и вот настолько уменьшилось Денег которые мы платим бизнесу Вот это интересно Ну да Ну я понимаю прекрасно там вот опять же Макса потому что это у тебя в история встраиваемая Это история про сетапы где-то там снаружи там есть тоже всякие свои особенности которые могут требовать вот эффективности иланга и его особенности которые есть там в его виртуальной машине вот сейчас не буду в это глубоко копать но А интересно вот этот Телеком тот который писался Да ребят опять же если кто-то вдруг знает или Посмотрите в Википедии скажите нам А что происходит там как там сейчас всё это делается Потому что интересно какие там он занимает Какую роль и часть этой всей экосистемы он занимает вот Слушай а ты работу сейчас вообще видишь по эликси то есть что вообще происходит то есть он на плата вышел вниз идт вверх как что там происходит эликсир эликсир живой работа есть какой-то как-то он используется вот просто НН нужен кам каким-то крупным компаниям для каких-то сложных проектов Да не для маленького бизнеса а Эликсир он вполне годи для

Маго и поэтому он более живой более востребованный сейчас плюс опять же как бы ну взять питани Руби переучить на Эликсир это прям хорошо идёт это прям то чем я занимался и я вижу что это хорошо работает а вот приучить их же на Ирлан - это уже немножко другой вопрос Ну это да да Ирлан всё-таки в этом плане я помню кстати много было на эту тему знаешь копий сломано когда одни значит он деревянный Так и должно быть другие не хватает выразительных средств и потом чем-то мне тоже самое го со своими проблемами напоминал когда там точно также разделились на то что тут он деревянный А тут Дайте нам значит Ну если ты архитектор который любишь строить там сложные абстракции то как бы да с лагом будет неудобно но зато кстати горшки вот Обратите внимание Вот это типа простота го типа вы читаете всё тупое как дрова Ну я скажу что в Ирлан ничуть не хуже то есть там точно такое же тупое как дрова понятно и простое и более того в отличие от гон ни в какие дженерики не пошёл то есть там как было всё деревянное так и осталось Ну просто простота она разная бывает простота у нас бывает простота языка в том смысле что он состоит там из небольшого количества элементов Вот и который там ну семантика да Из чего состоит язык Вот Но в этом плане язык очень простой Да он из маленького количества элементов состоит есть как бы простота насколько просто и удобно на этом языке создавать какие-то более-менее сложные системы Это другая простота как раз для удобства и нужные языки как раз более сложны Да в этом плане наверное жури вообще Лис поводы любят про это говорить Да что там всё очень просто у тебя полтора реально элемента а навернуть ты в том смысле что он просто устроен из небольшого количества частей Да да навернуть ты можешь очень много всего поверх А ты сам Вот смотри ты столько лет уже на этом пишешь то есть ты действительно Ну дальнейшую свою карьеру связываете языком То есть это очень интересно то есть люди столько на одном языке не сидят а ты сидишь Ну я сижу я востребован Да если бы я не мог найти работу я бы наверное поискал бы куда мне этого не происходит я по-прежнему востребован поэтому как бы да Ну например своего сына я бы например не рекомендовал бы ему изучать Илан Ну собственно ему 14 лет по коронова он питон изучил вот как бы входить там в профессию наверно всё-таки надо с стримов в

вз есть вот я в курсах всегда людям или вообще когда вот Я выступаю рассказываю У меня есть набор языков которые я учу В смысле рекомендую учить потому что они нас очень сильно как инженеров развивают для того чтобы видеть как бывает и как можно вообще на мир смотреть и вот Лан с экр у меня там занимает одно из ключевых мест потому что вот поработав немножко Вот в такой парадигме концепции когда у тебя сообщения когда у тебя конечные автоматы нет разделяемой состояния и вот быстро падай без обработки ошибок это конечно мозг очень сильно меняет такого экспириенс получить больше нигде нельзя и Ирлан в этом плане всегда будет впереди планеты всей это никогда не устареет это просто другой альтернатива давай так это реальность которая могла произойти в этом мире Да знаешь вот можно Такой типа снять фильм про альтернативный мир программирования но просто мир пошёл немножко в другую сторону но смешно то что он пошёл Не потому что Другой мир проще наоборот Все кто пробуют Ирлан они удивляются говорят Блин ну это же так просто и так Почему мы не пошли в этом пути Ну так сложилось наверное опять же потому что Илан требует такой машины а остальные под это не были заточены Ну на самом деле есть достаточно много интересных концептуальных языков которые там по-разному устроены по-разному решают проблемы которые потенциал свой не реализовали И способны там гораздо больше чем могли бы нуди сложнее про Ири с точки зрения все решения принимались с точки зрения инженерной эффективности Мы наверно Видели бы другой набор языков на рынке вот ну тут Да другие вопросы и бизнес и в общем-то людям всегда удобнее делать тоже самое что делают другие люди Да и поэтому с мейнстримом бороться за счёт каких-то там инженерных преимуществ сложно и с точки зрения карьеры программиста т те либо ты выбираешь карьеру стри программиста и изучаешь там там что-то и у тебя масса вариантов на рынке либо ты выбираешь Вот такой экзотическое там Скала там не знаю вот у тебя вариантов на рынке нету Зато у тебя проекты которыми ты занимаешься Они совсем другие они какие-то нестандартные очень там какие-то необычные нишевые нетипичные а команда разработки за кажым языком т какая-то корпо за Ирлан долгое время стояла эксон или стоит а Эликсир вообще был сделан просто каким-то чуваком насколько я помню я плохо знаю его историю Но по-моему это просто любитель который вот то есть никакая Ну нет Жозе валим во-первых сам ве разработчик с большим опытом в том числе в Руби и в рельсах и потом основатель компании в общем it предприниматель то есть в одном лице it предприниматель и инженер плюс он не один вокруг него там есть ядро единомышленников с похожим опытом поэтому Ну корпорации за ними не стоит ведь до сих пор это не крупная корпорация Но это тем не менее какая-то группа относительно небольших it компаний Угу я понял ну то есть Сейчас такого а ирландка Если мы говорим про развитие То есть получается что развитие эликсира ведь во многом связано с развитием Ирлан гов ской машины вот за ней кто стоит Ну да эксон эксон команда там попрежнему в Эриксона команда Ирлан Да прикольно рекомендуем нашим слушателям читателям слушателям поучать

поучать Ну я всё-таки хочу рекомендовать Лан может не с точки зрения карьеры А с точки зрения развития себя как инженера Вот и в общем-то здесь не так много вариантов чего можно изучать есть очень крутая книга написанная

есть и на веб-сайте бесплатная и в электронных форматах и в бумажном виде издавалась пере издавалась это самая крутая книжка вот есть более ранние книги от кафе ферлан от того же Джо Армстронга от францеска ча зарини Вот одна из них называется Лан programing другая называется progaming Лан я не помню Какая из них арга какая це Зарине Вот нуно они в общем обе хорошие Ну как бы и всё а вот по эликси книг издаётся Масса и по самому языку и по фрер и по библиотеке э для применения эликсира там и применения эликсира см и в общем тьма книг вот ну классическая считается прор дас вот ну это книги Да я

уже не сильно книги Чита Да учатся по-другому есть там какие-то интерактивные курсы есть какие-то видеокурсы тут я в общем-то ничего не хочу рекомендовать кроме своего собственного курса по Эликсир Вот потому что у меня есть более старый курс Лан но он не актуальный сильно устарел Но вот последний год 2 гонора сде эси

порядка что ли роликов каждый ролик от 20 до 40 минут лиф кодинга да то есть этот курс не какой-то там теоретический это в основном лиф кодинг Я даю какие-то концепции тут же пишу код тут же там тесты выполняются так далее и так далее Вот и в общем-то людям нравится меня хвалят мне приятно вот поэтому свой курс я никак могу обой вниманием

это вот хороший вариант обязательно ребят Посмотрите курс Попробуйте потренируйтесь единственное вот эту штуку важно проговорить Эликсир Ну и вообще да это два уровня первый уровень - это просто язык в плане конструкции Для того чтобы там обрабатывать коллекции создавать переменные и так далее А есть вот этот второй уровень это уже написание даван кода Когда вы используете соответственно акторы и строить какую-то систему это прямо реально два разных мира соответственно там нужно для того чтобы попасть во второй нужно немножко покопаться с первым но нельзя останавливаться То есть если вы просто попробуете на Эликсир там коллекции пооб и потом скажете Ну ладно О'кей всё Эликсир я понял этого будет недостаточно вы не прикоснётся к тому ради чего всё это вообще существует и вот тут Важно сделать вторую часть а там во всех книжках насколько я помню было Мне очень нравилось когда брали классические задачи вузовские там типа знаешь это поле морковки коза или там какая-нибудь группа играющая лифт Аска и так далее это надо запрограммировать чтобы оно в реальной жизни Вот так вот жило и вы видели как там порождаются процессы как одни там других там едят ещё что-нибудь и насколько просто пишется такой код Но это всегда Да шутка была что любой программист на эрланг за 2 недели научится и напишет распределён ную систему Да и она у него будет работать в отличие от других языков Это конечно шутка но в реальности на Ирландии действительно хоть что-то будет работать в отличие от всех остальных языков где вам 2 недели не хватит создать надёжную систему Вот и то и то будет поделка но на эрланг оно хотя бы как-то будет работать вот поэтому Этот уровень обязательно Попробуйте Ну что мы с тобой подошли к концу Я надеюсь что мы раскрыли тему для ребят мне всегда знаешь вот когда мы на эти тем общаемся я понимаю что я-то в голове Это хорошо представляю А те кто нас слушают нет и они так контекст не держат и мне всегда интересно ну насколько вообще на слух Особенно учитывая что люди подкаст слушают в основном когда делают что-то другое насколько Они вообще на слух вот эту нашу историю про акторы восприняли и для них это не было Просто белым шумом что что-то ребята там говорят вообще не понимаю о чём идёт речь тоже пожалуйста Поделитесь это будет интересно Ну мне кажется это вообще не Цель этого формата подкаста обучить людей каким-то концепциям цель прорекламировать а потом уже Кому понравилось тот найдёт способ научиться да да В общем Юр большое тебе спасибо что прил Спасибо что позвал нравился подкаст а ставьте колокольчики лайки подписывайтесь на все А наши сети Везде где мы его выкладываем ВКонтакте на ютубере канал если вам и пишите свои комментарии Что вы об этом думаете обо всём пробовали не пробовали как Эликсир повлиял на вас Если вы когда-нибудь действительно на нём писали код если вам не понравилось ставьте дизлайк и обязательно тоже об этом пишите мы будем смотреть и думать что вам ответить так чтобы а завязался какой-то разговор Спасибо пока Всем пока

[музыка]

Creators and Guests

Юрий Жлоба
Guest
Юрий Жлоба
Больше 20 лет в программировании, больше 12 лет в Эрланге и Эликсире, больше 7 лет в компании Варгейминг. Занимался масштабными высоко нагруженными проектами в разных предметных областях и обучением программистов.
#30 Почему WhatsApp, Discord и другие гиганты выбирают Erlang? | Юрий Жлоба
Broadcast by