Сегодня хочу рассказать тебе о прекрасном функциональном языке для написания неубиваемых распределённых систем, а более конкретно вебни на бэке, больших soft-realtime систем и IoT говен. Называется он Elixir, а работает он на виртуальной машине real humanBEAM, на которой ещё работает язык Erlang.
Немного истории
Эликсир это современный язык, построенный поверх языка Erlang с блекджеком и лисповыми макросами. У этих языков полный интероп в обе стороны, но при этом эликсир лишает вас этого удовольствия написания Сам язык Erlang появился в компании Ericsson как язык для написания максимально отказоустойчивых телекоммуникационных систем. Именно из желания создать среду для написания максимально отказоустойчивых систем появились все основные фичи.
Основные фичи
⚹ Ахуенно приспособлен к разработке параллельных и конкуррентных программ. Эликсир способен запускать мильоны процессов-акторов, работающих асинхронно, с различными приоритетами и всем таким. Эти процессы не делят память и общаются через пересылку сообщений.
⚹ Ахуенно приспособлен к разработке распределённых систем. Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов, gossip-ы уже включены в язык. Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с)
⚹ Ахуенно приспособлен к разработке отказоустойчивых систем. Что делают кубы, когда падает сервис? Они перезапускают его. Эрланг делает то же самое, только не с сервисами, а с процессами, что значит что неожиданное исключение в одной части функционала никак вообще никак не заденет другой функционал. Гоферы пытаются достичь того же с помощью микросервисов, а в Elixir такой функционал из коробки.
⚹ Ахуенный тулинг. В отличие от эрланга с его хэдерами, makefile-ами и прочими пыльными приколами, эликсир за секунды позволяет создать проект, скомпилировать его, сконфигурировать его, собрать артефакт, скачать зависимости и всё такое в стандартах всех современных языков. Серьёзно, местный билдтул (mix) гораздо лучше чем забугорские cargo, npm, go и gem.
Нахуя
Ты хочешь нормально спать по ночам? Ты хочешь отказаться от ночных дежурств? Ты хочешь сэкономить на этих богомерзких девопсах и прочих сисянах? Ты устал дебажить очередной дата-рейс ебучих горутин?
Я хочу спать по ночам. Как вкатиться?
Чтобы успешно найти работу на эликсире, нужно уже иметь некоторый опыт разработки за деньги и понимание того какое же говно это ваше ойти. Желательно от одного года в вебе. Самый быстрый способ обучения это в то же время и самый эффективный способ, поэтому синтаксис и стандартная либа постигается вот тут https://elixirschool.com/ru
Более подробное описание внутренностей, хороших практик и хитростей стандартной либы описывается вот тут. Тут будет эрланг, но это не должно быть проблемой https://learnyousomeerlang.com/
Тому, кто ценит своё время, я советую начать писать какой-нибудь проектик параллельно с чтением книжек. Чтобы стать джуном на эликсире опытному бэкендеру нужно не больше месяца.
Рыночек
Средняя температура по больнице зарплата у эликсирщика традиционно больше чем у любого друогого языка как минимум в два раза, поэтому поменять голанг или питон на эликсир будет выгодно. Вакансии на рынке РФ существуют, искать можно на hhрю или в чатиках в телеге t.me/proelixir. Забугорных вакансий значительно больше и они охотно нанимают разработчиков с опытом. Самое важное качество при найме это не знание самого языка, а софт-скиллы и общее понимание веб-разработки как таковой, так что придётся социализироваться.
В чём хочешь. Есть плагины для VSCode, для IDEA. Любая IDE, которая интегрируется с LSP подойдёт. Если ты ноулайфер, то на Elixir можно писать в Emacs, Vim, Neovim, Helix или Kakoune (я пользуюсь последним).
>>2954172 (OP) >Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов, gossip-ы уже включены в язык. >Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с) Какие системы консенсуса встроены в Эликсир?
>>2956192 >Где ты прочитал что системы консенсуса встроены в Elixir? Дегроид, прямо в шапке написано: >Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с) Вот я и спрашиваю, где паксос?
Ты реально тупой походу. Если каждая распределённая система содержит в себе часть Erlang, это не значит что Erlang содержит в себе каждый распределённый алгоритм. Понимаешь, если лично ты это элемент множества долбоёбов, то это не значит что все долбоёбы это ты. Чувствуешь разницу?
А так, консенсусов на Erlang/Elixir дохуя в опенсурсе, просто в язык они не встроены
Во-первых, если уж начал пиздеть про bigtable, то ты уж должен знать, что там синхронизация времени не часами лампорта, а буквально атомными часами, по штуке в каждом дц. https://www.wired.co.uk/article/google-gps-powered-database в этой статье даже ебучий автор Riak (который на Erlang написан) пишет что способы синхронизации времени совершенно разные.
Во-вторых, цитата означает не то что каждая распределённая система написана на Erlang, а значит что в каждой из распределённых систем присутствуют элементы, которые реализованы в Erlang, только в Erlang они обкатаны огромным колчиеством пользователей и написаны на чистом кроссплатформенном C, а в твоей хуйне они написаны на коленке и обкатаны только тобой на своём лэптопе.
Так что ебать ты тупой шизофреник: сначала нихуя неправильно понял, потом ещё доебался к хуйне, которую сам и придумал, и ещё и в этом доёбе очень жидко обосрался. Просто ебать разраб bigtable из гугла собственной персоной ворвался в тред прямиком из своего кабинета с мягкими стенами.
>>2954172 (OP) OP и аноны всем привет! Случайно наткнулся на тред, хотел задать вопрос. Сам думал серьезно C# учить, но почему то наткнулся на тред и стало интересно. Хочется с большими мощными системами работать. Что посоветуете выбрать с учётом перспектив C# или Elixir? Сам физик+IT, баловался с JS, Python.
Бери Elixir, он перспективнее, потому что на Elixir есть ML и экосистема как у Python в этом плане. Да и по жизни Elixir полезнее чем шарп, потому что когда ты будет один что-то делать, на Elixir будет всё получаться сильно проще чем на C#
Не, ну для такого дегенерата как ты, работы и правда не найдётся, даже не пытайся. Только я тебя расстрою, тут ни один язык не поможет, даже в вонючем JS на тебя будут пальцем показывать и громко смеяться, кога ты будешь слюни пускать
писал на эрланге оче давно, полгода назад почитал пару книг про эликсир, покодил немного на нём.
Акторы/OTP действительно снимают головную боль когда пишешь распределенный софт.
Но всё же решил не вкатываться в него по этм причинам:
Основной скоуп работы - вебмакакинг. Феникс для эликсира это рельсы для руби. В целом 90% потенциальной работы это крудошлёпинг пускай с акторами и ФП, от которого меня уже воротит
Эликсир это именно инструмент для создания распределённых систем, писать на нём что-то кроме них смысла не имеет на мой взгляд.
Быстрее чем если пихать в Redis. Распределённый, потому что у нас кластер, который шлёт запросы в сторонний сервис шлёт из разных инстансов, и этот сервис не хотелось бы досить
> В целом 90% потенциальной работы это крудошлёпинг
Зависит от проекта. Круды это же интерфейсы, а всё интересное внутри. Например написать какую-нибудь биржу с авторизацией и всем таким, не отличается от какого-нибудь MQTT брокера практически никак, хотя первое это на 99% круд и один вебсокет, а второе это прям работа с низкоуровневым сетевым стеком
>>3029676 ну удачи тебе найти работу по написанию такого интересного проекта (серьезно), но скорее всего вся работу будет шлёпать формочки и дрочить лайввью.
>>3030155 Часть - web, но это бэк без типичного фронтэнда вообще, соответственно без валидации формочек (асинхронщина всяческая), часть - типичное для стека перекладывание сообщений из одного места в другое. Не то чтобы прям что-то интересное, но и не формочки, а высоконагруженное/распараллеленное/асинхронное
1. LinkedIn 4. elixirjobs.net 8. tg: @proelixir 8. Бывшие коллеги и знакомые в elixir-тусовке
На моём опыте, всегда удаётся найти норм работу на первых трёх, но через знакомых удаётся найти самые классные. Так что общайтесь, пилите опенсурсик друг с другом, ходите на конфочки, сидите на эликсирфорумах
>>2977906 Ага, а самый высокооплачиваемый Zig, которому еще до релиза как до Луны (последняя версия 0.11). Вам не кажется что что-то не так с этой статистикой?
>>3071569 >Так может айда Perl учить? Perl в телекоме используют всякие админы Cisco.
Но лучше не учить. Perl это лидер по забываемости. В прошлом веке я хуячил на ём программы. Нынче абсолютно забыл синтаксис. И это нисколько не смущает - ничего не потерял.
Чет я посмотрел примеры кода и не вдупляю ничего вообще. Функциональные языки имеют нифига не интуитивный код. Оно того стоит вообще? ФП программирование для умных? Насколько сложно после условной джавы или C# пересесть на фп язык, у кого-нибудь был опыт?
>>2954172 (OP) >о прекрасном функциональном языке помню еще в вузе плевался от прекрасного языка ПРОЛОГ, вижу тут решили продолжить традицию случайных результов выдаваемых операторами, но тыкать продолжу, оп смог прорекламировать язык
>>3083727 Ну на самом деле поведение с [0 | a] и [a | 0] логично. Ты как бы указываешь head и tail списка, т.е. голову и хвост. Хвостом списка может быть только список. Логично же.
>>3084671 Возможно в каком-то тесте такое у него получится, но как только добавить немного логики, то тут сразу отсосёт у гошки. Вообще видео глянул он дохуя нахваливал как у него красиво получилось, но на практике кроме него никто толком ничего там не пилит и по-нормальному язык никто не гонял. Он еще жаловался что спонсоры ему платят в 2 раза меньше средней ЗП и дайте деняг чтобы у него был энтузиазм и он смог нанять ещё кого-то лол. Если никакая крупная контора не подкинет дровишек, то оно загнется нахуй
>>3081500 Бляя, фп языки одни дегенераты создают похоже. У одного блять do end вместо скобок и динамикодрисня, у другого для именованных параметров надо 2 раза название писать fn(name1 name2: String) -> String. "->" вместо ":" для функций, ну он еблан чтоль? Сделай ты по дефолту возможность при вызове указывать имя параметра, или не указывать. Как этому больному ебанату вообще в голову пришло 2 названия для одного параметра писать? экстеншонов не будет. Похоже функциональные языки такое же говно, как и ООП языки. Нормальный язык должен брать лучшее из обоих миров, потому что ООП - море говна, а ФП - лес хуёв.
>>3127992 Тогда следующий вопрос, какие книги посоветуешь, и что, на твой взгляд, можно такого запилить чтобы впечатлить нанимателя не прибегая к нетворкингу?
>>3133611 Просто работаю с высокой нагрузкой. Если тебе норм там строчки разбирать или ещё чего такое, то разбирай, я же не говорю что это для дегродов-мартышек.
>>3133588 >Жвм никогда не добьётся уровня компиляции си, в которой асм код близок к написанному вручную. Это потому что она добивается большего. Может твой Си например циклы разворачивать в зависимости от использования? Может твой Эликсир девиртуализировать вызовы методов? А ДЖВМ может и просто кэширует трансляцию часто вызываемых функций, то есть ты по сути работает с обычным С бинарником после разогрева.
>>3133029 >А тут вроде как компилируемая залупа, но почему-то говна с гц нахуячили. Ты ролфишь или правда такой ограниченный? Во всех функциональных языках есть GC, и да они компилируются в нативный код.
>>3133777 > Может твой Си например циклы разворачивать в зависимости от использования? Да, конечно. Там столько оптимизаций шо просто пиздец. > Может твой Эликсир девиртуализировать вызовы методов? Так в ерланге нет виртуальных фукнций, не? > то есть ты по сути работает с обычным С бинарником после разогрева. Да, это действительно так, может быть сравнимо, особенно если писать не как дэбил. Но ебля с JNI совсем не привлекает, сделали бы они это как-то попроще было бы заебись, шобы я мог менять методы JVM или вроде того.
>>3133827 Это бессмысленный язык, банимаешь ли. Ну нахуебенили они гц и функциональногов и что? Стал говналг ерблангом? Не стал. А какой у него плюс перед сри/сри++? Зачем? Чтобы. Что? Он имеет смысл если тебе просто нравится и хочется на го писать, не более, технических плюсов нихуя нет.
>>3133876 >Да, конечно. Там столько оптимизаций шо просто пиздец. У тебя же компиленый бинарь, ты его не можешь менять после компиляции.
>Так в ерланге нет виртуальных фукнций, не? Есть наследование, же (behaviour)? Как он разбирается какую функцию вызвать? https://www.erlang.org/doc/efficiency_guide/functions#function-calls >apply/3 must look up the code for the function to execute in a hash table. It is therefore always slower than a direct call or a fun call.
>Да, это действительно так, может быть сравнимо, особенно если писать не как дэбил. Но ебля с JNI совсем не привлекает, сделали бы они это как-то попроще было бы заебись, шобы я мог менять методы JVM или вроде того. Так JNI тут непричем. Это всё JIT делает, JNI нужен только когда ты внешние С библиотеки вызываешь. В большинстве случае это не нужно.
>>3134020 >У тебя же компиленый бинарь, ты его не можешь менять после компиляции. Могу переписывать его прямо во время исполнения, о чем ты вообще? >>apply/3 must look up the code for the function to execute in a hash table. It is therefore always slower than a direct call or a fun call. Какая чопорная организация кода. Но работает, видимо. > Так JNI тут непричем. Не, через jni я собираюсь запускать свой асм, например. Или свои высокопроизводительные хуйни. >В большинстве случае это не нужно. Мне нужно.
> Есть наследование, же (behaviour)? Как он разбирается какую функцию вызвать?
У эликсирчика для этого есть протоколы и консолидация. Там это буквально на один jump table dispatch медленнее получается. В жабе есть мономорфизация JIT-ом, но какой в этом толк, если у тебя язык настолько многословный и настолько топорный, что быстрее будет ручками всё мономорфизировать на Rust
Типа, вот JIT полезен в JavaScript, там все эти фичи удобны и много проблем решают, особенно учитывая что там динтипизация и весь этот диспатч типов очень удобно оптимизировать в рантайме. В Java в этом толку мало, типа только если повыёбываться перед кем-то. Условно, развернуть цикл это звучит круто, но на деле там надо раз 10 инлайнуть функции, чтобы это хоть что-то ускорило, а учитывая тот Clean Code и кучи абстракций, которыми на жабе срут без остановки, у тебя ни один рантайм не проссыт где вообще и что инлайнить.
Если посмотреть как работают оптимизации в жабовом JIT на уровне Sea of Nodes IR, то можно увидеть, что они инлайнить и не пытаются, а рассчитывают на то что у тебя во время компиляции рантайм додумается что вообще нужно инлайнуть.
>>3138854 >если у тебя язык настолько многословный и настолько топорный, что быстрее будет ручками всё мономорфизировать на Rust странно это сравнивать с растом ::unwrap()::unwrap()::unwrap()
Да и толк в том, что бомбить от боров-чекера разраб не будет и время сэкономит
>>3138854 >Там это буквально на один jump table dispatch медленнее получается. Ну так так всегда, это не выигрыш никакой, это просто так работает везде. Просто джава как раз может это устранять, о чем я и пишу
>>3140175 Просто страницу памяти с кодом делаешь в режим Read/Write и всё. Плюс синхронизация и обновление кэша команд, если это вообще требуется. Можешь вообще менять указатель возврата или что угодно ещё, блядь, да что угодно можно делать, это ж ебаная си.
>>3252065 Я заебался прогать. Эликсир топ, все дела, но само по себе программирование, как работа не устраивает. Изучать, преподавать, баловаться иногда, да, 40 часов в неделю думать о нём неприятно.
>>3253762 >большой и сложный ecommerce с аукционами, сложным поиском, лайвстримингом и всем таким Не заебался? Или ты за деньги хуй будешь? Реально ли вкатиться в эту вашу, без хорошего английского(то есть в рф)? И можно ли пинать хуи?
> Реально ли вкатиться в эту вашу, без хорошего английского(то есть в рф)?
Да, конечно. Денег в РФ столько платят только в финтехе или на очень высоких позициях в средних/крупных проектах. Поэтому лучше учить английский.
Вообще, современный мир так устроен, что твой уровень профессионального скилла определяет где-то ну 30% твоей зарплаты. Знание языка, таймзона, разрешение на работу в определённой стране, простые человеческие качества типа умения общаться с людьми нормально и так далее определяют 70% всего твоего успеха.
Как пример, знаю чувака который патчи в cpython пишет регулярно. Зарабатывает ~150к рублей на говнопроекте в Питере в душном офисе, где даже ноги не вытянуть. И знаю просто социоблядного чувака, который тока вкатился на Go, и по визе талантов пробился в грейт британ, хорошо знает английский и гребёт где-то 7-8к фунтов в месяц (1кк рублей примерно) на позиции джуна, и ещё живёт не в мухосрани
> И можно ли пинать хуи?
Конечно можно, но делать так, чтобы за это не уволили и вообще может даже ещё похвалили, это мастерство, которое приходит только с опытом или еврейской кровью при рождении