Предыдущий: >>2082722 (OP)
Сегодня хочу рассказать тебе о прекрасном функциональном языке для написания неубиваемых распределённых систем, а более конкретно вебни на бэке, больших soft-realtime систем и IoT говен. Называется он Elixir, а работает он на виртуальной машине real human BEAM, на которой ещё работает язык Erlang.
Немного истории
Эликсир это современный язык, построенный поверх языка Erlang с блекджеком и лисповыми макросами. У этих языков полный интероп в обе стороны, но при этом эликсир лишает вас этого удовольствия написания Сам язык Erlang появился в компании Ericsson как язык для написания максимально отказоустойчивых телекоммуникационных систем. Именно из желания создать среду для написания максимально отказоустойчивых систем появились все основные фичи.
Основные фичи
⚹ Ахуенно приспособлен к разработке параллельных и конкуррентных программ. Эликсир способен запускать мильоны процессов-акторов, работающих асинхронно, с различными приоритетами и всем таким. Эти процессы не делят память и общаются через пересылку сообщений.
⚹ Ахуенно приспособлен к разработке распределённых систем. Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов, gossip-ы уже включены в язык.
Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с)
⚹ Ахуенно приспособлен к разработке отказоустойчивых систем. Что делают кубы, когда падает сервис? Они перезапускают его. Эрланг делает то же самое, только не с сервисами, а с процессами, что значит что неожиданное исключение в одной части функционала никак вообще никак не заденет другой функционал. Гоферы пытаются достичь того же с помощью микросервисов, а в Elixir такой функционал из коробки.
⚹ Ахуенный тулинг. В отличие от эрланга с его хэдерами, makefile-ами и прочими пыльными приколами, эликсир за секунды позволяет создать проект, скомпилировать его, сконфигурировать его, собрать артефакт, скачать зависимости и всё такое в стандартах всех современных языков. Серьёзно, местный билдтул (mix) гораздо лучше чем забугорские cargo, npm, go и gem.
Нахуя
Ты хочешь нормально спать по ночам? Ты хочешь отказаться от ночных дежурств? Ты хочешь сэкономить на этих богомерзких девопсах и прочих сисянах? Ты устал дебажить очередной дата-рейс ебучих горутин?
Я хочу спать по ночам. Как вкатиться?
Чтобы успешно найти работу на эликсире, нужно уже иметь некоторый опыт разработки за деньги и понимание того какое же говно это ваше ойти. Желательно от одного года в вебе. Самый быстрый способ обучения это в то же время и самый эффективный способ, поэтому синтаксис и стандартная либа постигается вот тут
https://elixirschool.com/ru
Более подробное описание внутренностей, хороших практик и хитростей стандартной либы описывается вот тут. Тут будет эрланг, но это не должно быть проблемой
https://learnyousomeerlang.com/
Конкретно вебня на эликсире
платно: https://www.amazon.com/Programming-Phoenix-1-4-Productive-Reliable/dp/1680502263
бесплатно: https://hexdocs.pm/phoenix
Тому, кто ценит своё время, я советую начать писать какой-нибудь проектик параллельно с чтением книжек. Чтобы стать джуном на эликсире опытному бэкендеру нужно не больше месяца.
Рыночек
Средняя температура по больнице зарплата у эликсирщика традиционно больше чем у любого друогого языка как минимум в два раза, поэтому поменять голанг или питон на эликсир будет выгодно. Вакансии на рынке РФ существуют, искать можно на hhрю или в чатиках в телеге t.me/proelixir. Забугорных вакансий значительно больше и они охотно нанимают разработчиков с опытом. Самое важное качество при найме это не знание самого языка, а софт-скиллы и общее понимание веб-разработки как таковой, так что придётся социализироваться.
Вопросы?
> В чем писать код?
В чём хочешь. Есть плагины для VSCode, для IDEA. Любая IDE, которая интегрируется с LSP подойдёт. Если ты ноулайфер, то на Elixir можно писать в Emacs, Vim, Neovim, Helix или Kakoune (я пользуюсь последним).
Собственно LSP: https://github.com/elixir-lsp/elixir-ls
>Все основные проблемы написания распределённых систем вроде сихнронизации монотонных часов, общения между машинами, поиска машин, heartbeat-ы, группы процессов, gossip-ы уже включены в язык.
>Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с)
Какие системы консенсуса встроены в Эликсир?
> Какие системы консенсуса встроены в Эликсир?
Где ты прочитал что системы консенсуса встроены в Elixir?
>Где ты прочитал что системы консенсуса встроены в Elixir?
Дегроид, прямо в шапке написано:
>Любая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. (с)
Вот я и спрашиваю, где паксос?
> Дегроид, прямо в шапке написано:
Ты реально тупой походу. Если каждая распределённая система содержит в себе часть Erlang, это не значит что Erlang содержит в себе каждый распределённый алгоритм. Понимаешь, если лично ты это элемент множества долбоёбов, то это не значит что все долбоёбы это ты. Чувствуешь разницу?
А так, консенсусов на Erlang/Elixir дохуя в опенсурсе, просто в язык они не встроены
>А ты видел?
Да. И нихуя там из Эрланга нет. Разве что синхронизация времени, но это было изобретено задолго до Эрланга.
tsoding на твиче/ютубе
Ебать ты тупой.
Во-первых, если уж начал пиздеть про bigtable, то ты уж должен знать, что там синхронизация времени не часами лампорта, а буквально атомными часами, по штуке в каждом дц. https://www.wired.co.uk/article/google-gps-powered-database в этой статье даже ебучий автор Riak (который на Erlang написан) пишет что способы синхронизации времени совершенно разные.
Во-вторых, цитата означает не то что каждая распределённая система написана на Erlang, а значит что в каждой из распределённых систем присутствуют элементы, которые реализованы в Erlang, только в Erlang они обкатаны огромным колчиеством пользователей и написаны на чистом кроссплатформенном C, а в твоей хуйне они написаны на коленке и обкатаны только тобой на своём лэптопе.
Так что ебать ты тупой шизофреник: сначала нихуя неправильно понял, потом ещё доебался к хуйне, которую сам и придумал, и ещё и в этом доёбе очень жидко обосрался. Просто ебать разраб bigtable из гугла собственной персоной ворвался в тред прямиком из своего кабинета с мягкими стенами.
OP и аноны всем привет! Случайно наткнулся на тред, хотел задать вопрос. Сам думал серьезно C# учить, но почему то наткнулся на тред и стало интересно. Хочется с большими мощными системами работать. Что посоветуете выбрать с учётом перспектив C# или Elixir?
Сам физик+IT, баловался с JS, Python.
Бери Elixir, он перспективнее, потому что на Elixir есть ML и экосистема как у Python в этом плане. Да и по жизни Elixir полезнее чем шарп, потому что когда ты будет один что-то делать, на Elixir будет всё получаться сильно проще чем на C#
>>2977229
Я вот эти мемы кстати так и не понял. Открываю статистику, а там одни из самых высокооплачиваемых языков это Erlang и Elixir
https://survey.stackoverflow.co/2023/#technology-top-paying-technologies
Не, ну для такого дегенерата как ты, работы и правда не найдётся, даже не пытайся. Только я тебя расстрою, тут ни один язык не поможет, даже в вонючем JS на тебя будут пальцем показывать и громко смеяться, кога ты будешь слюни пускать
Спасибо за ответ Анон!
Акторы/OTP действительно снимают головную боль когда пишешь распределенный софт.
Но всё же решил не вкатываться в него по этм причинам:
Основной скоуп работы - вебмакакинг. Феникс для эликсира это рельсы для руби. В целом 90% потенциальной работы это крудошлёпинг пускай с акторами и ФП, от которого меня уже воротит
Эликсир это именно инструмент для создания распределённых систем, писать на нём что-то кроме них смысла не имеет на мой взгляд.
Медленный пиздос
Быстрее чем если пихать в Redis. Распределённый, потому что у нас кластер, который шлёт запросы в сторонний сервис шлёт из разных инстансов, и этот сервис не хотелось бы досить
> В целом 90% потенциальной работы это крудошлёпинг
Зависит от проекта. Круды это же интерфейсы, а всё интересное внутри. Например написать какую-нибудь биржу с авторизацией и всем таким, не отличается от какого-нибудь MQTT брокера практически никак, хотя первое это на 99% круд и один вебсокет, а второе это прям работа с низкоуровневым сетевым стеком
ну удачи тебе найти работу по написанию такого интересного проекта (серьезно), но скорее всего вся работу будет шлёпать формочки и дрочить лайввью.
Я уже over 5 лет хуярю чистый бэкенд на elixir, формочки есть только в паре небольних внутренних приложениях, брат жив
Часть - web, но это бэк без типичного фронтэнда вообще, соответственно без валидации формочек (асинхронщина всяческая), часть - типичное для стека перекладывание сообщений из одного места в другое. Не то чтобы прям что-то интересное, но и не формочки, а высоконагруженное/распараллеленное/асинхронное
кыш с двощей
Да да, где в секретных чатах тысячи вакансий которые ждут не дождутся всех.
1. LinkedIn
4. elixirjobs.net
8. tg: @proelixir
8. Бывшие коллеги и знакомые в elixir-тусовке
На моём опыте, всегда удаётся найти норм работу на первых трёх, но через знакомых удаётся найти самые классные. Так что общайтесь, пилите опенсурсик друг с другом, ходите на конфочки, сидите на эликсирфорумах
https://github.com/yzh44yzh/elixir_course/tree/master
мимо 8 месяцев в ведроид разработке
Ну хз, я вот уже полгода облизываюсь на эликсир вакухи все 5 штук где требуют 1-2 года опыта и на них всего 10-20 откликов
мимо не-эликсирщик
Не, нормально ищется, специалистов хороших мало, можно и джуном на 200-250 залететь.
Ну не только уж, кругозор ещё помогает на собесах, адекватное общение, мотивация и умение рассказать про выбор языка, причины.
Фирмы готовы вкладываться в адекватных джунов. Потому что опытные специалисты мало.
Ага, а самый высокооплачиваемый Zig, которому еще до релиза как до Луны (последняя версия 0.11). Вам не кажется что что-то не так с этой статистикой?
20 вакансий на ХХ, 3 на линкедине. Ни в чем себе не отказывай.
3 года на фронтенде, не осилил шапку, нихуя не понимаю про ваши распределённые системы. Моё ебало представили?
>Так может айда Perl учить?
Perl в телекоме используют всякие админы Cisco.
Но лучше не учить. Perl это лидер по забываемости. В прошлом веке я хуячил на ём программы. Нынче абсолютно забыл синтаксис. И это нисколько не смущает - ничего не потерял.
Функциональные языки имеют нифига не интуитивный код. Оно того стоит вообще?
ФП программирование для умных? Насколько сложно после условной джавы или C# пересесть на фп язык, у кого-нибудь был опыт?
https://gleam.run/
Выглядит интересно, будет время пощупаю, странно что о нем ничего не слышал и не видел
Нахуй он нужен, я так и не понял
Заглянул на главную страницу.
Увидел ЭТО.
На хуй и в пизду.
Очередное соевое поделие, даже master переименован в main.
База
>о прекрасном функциональном языке
помню еще в вузе плевался от прекрасного языка ПРОЛОГ, вижу тут решили продолжить традицию случайных результов выдаваемых операторами, но тыкать продолжу, оп смог прорекламировать язык
Тебя наверное смутил оператор "|>".
Просто нужно понять как он работает.
На самом деле несложная штука.
Ну на самом деле поведение с [0 | a] и [a | 0] логично.
Ты как бы указываешь head и tail списка, т.е. голову и хвост.
Хвостом списка может быть только список. Логично же.
Возможно в каком-то тесте такое у него получится, но как только добавить немного логики, то тут сразу отсосёт у гошки.
Вообще видео глянул он дохуя нахваливал как у него красиво получилось, но на практике кроме него никто толком ничего там не пилит и по-нормальному язык никто не гонял. Он еще жаловался что спонсоры ему платят в 2 раза меньше средней ЗП и дайте деняг чтобы у него был энтузиазм и он смог нанять ещё кого-то лол.
Если никакая крупная контора не подкинет дровишек, то оно загнется нахуй
Бляя, фп языки одни дегенераты создают похоже. У одного блять do end вместо скобок и динамикодрисня, у другого для именованных параметров надо 2 раза название писать fn(name1 name2: String) -> String.
"->" вместо ":" для функций, ну он еблан чтоль? Сделай ты по дефолту возможность при вызове указывать имя параметра, или не указывать. Как этому больному ебанату вообще в голову пришло 2 названия для одного параметра писать?
экстеншонов не будет.
Похоже функциональные языки такое же говно, как и ООП языки.
Нормальный язык должен брать лучшее из обоих миров, потому что ООП - море говна, а ФП - лес хуёв.
Это же дефолтная паверщель
бротиш, дрочи свою сишечку как ебучие деды в 70е. Нормальные упругие кодеры уже давно в вебе, в js'e ну или вот в рубях/эликсире
Что это?
Тогда следующий вопрос, какие книги посоветуешь, и что, на твой взгляд, можно такого запилить чтобы впечатлить нанимателя не прибегая к нетворкингу?
Bump
А есть элексир, но чтобы был такой же быстрый как си?
В чем вообще проблема слоупочности элексира?
Не, это не то, говналг, он совсем плох. Какие-то сборщики мусора, будто в программировании может быть мусор, что за бред безумных манагеров.
А че ты собрался такое разрабатывать, что не хватит скорости? Бог дал изи горизонтальное масштабирование
Покамест кожу на эрланге, очень нравится. А ты что советуешь? Скала, Кложюрь, Ф-сярп??
Да, все что на ДЖВМ из-за лучшего JIT такое же быстрое как Си после разогрева
Java или Clojure, если тебе прямо хочется функциональщину
Просто работаю с высокой нагрузкой. Если тебе норм там строчки разбирать или ещё чего такое, то разбирай, я же не говорю что это для дегродов-мартышек.
>Жвм никогда не добьётся уровня компиляции си, в которой асм код близок к написанному вручную.
Это потому что она добивается большего. Может твой Си например циклы разворачивать в зависимости от использования? Может твой Эликсир девиртуализировать вызовы методов?
А ДЖВМ может и просто кэширует трансляцию часто вызываемых функций, то есть ты по сути работает с обычным С бинарником после разогрева.
>А тут вроде как компилируемая залупа, но почему-то говна с гц нахуячили.
Ты ролфишь или правда такой ограниченный? Во всех функциональных языках есть GC, и да они компилируются в нативный код.
> Может твой Си например циклы разворачивать в зависимости от использования?
Да, конечно. Там столько оптимизаций шо просто пиздец.
> Может твой Эликсир девиртуализировать вызовы методов?
Так в ерланге нет виртуальных фукнций, не?
> то есть ты по сути работает с обычным С бинарником после разогрева.
Да, это действительно так, может быть сравнимо, особенно если писать не как дэбил. Но ебля с JNI совсем не привлекает, сделали бы они это как-то попроще было бы заебись, шобы я мог менять методы JVM или вроде того.
>>3133827
Это бессмысленный язык, банимаешь ли. Ну нахуебенили они гц и функциональногов и что? Стал говналг ерблангом? Не стал. А какой у него плюс перед сри/сри++? Зачем? Чтобы. Что?
Он имеет смысл если тебе просто нравится и хочется на го писать, не более, технических плюсов нихуя нет.
>Да, конечно. Там столько оптимизаций шо просто пиздец.
У тебя же компиленый бинарь, ты его не можешь менять после компиляции.
>Так в ерланге нет виртуальных фукнций, не?
Есть наследование, же (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 нужен только когда ты внешние С библиотеки вызываешь. В большинстве случае это не нужно.
>У тебя же компиленый бинарь, ты его не можешь менять после компиляции.
Могу переписывать его прямо во время исполнения, о чем ты вообще?
>>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, то можно увидеть, что они инлайнить и не пытаются, а рассчитывают на то что у тебя во время компиляции рантайм додумается что вообще нужно инлайнуть.
>>3134112
> Могу переписывать его прямо во время исполнения, о чем ты вообще?
Тебе про JIT рассказывают, долбоёб
>если у тебя язык настолько многословный и настолько топорный, что быстрее будет ручками всё мономорфизировать на Rust
странно это сравнивать с растом ::unwrap()::unwrap()::unwrap()
Да и толк в том, что бомбить от боров-чекера разраб не будет и время сэкономит
>Там это буквально на один jump table dispatch медленнее получается.
Ну так так всегда, это не выигрыш никакой, это просто так работает везде. Просто джава как раз может это устранять, о чем я и пишу
>Тебе про JIT рассказывают, долбоёб
Даунёнок, причем тут жит если в си можно как угодно менять во время исполнения код программы?
Просто страницу памяти с кодом делаешь в режим Read/Write и всё. Плюс синхронизация и обновление кэша команд, если это вообще требуется. Можешь вообще менять указатель возврата или что угодно ещё, блядь, да что угодно можно делать, это ж ебаная си.
Как ты поймешь на какую страницу памяти ОС поместила код? Это же детали, скрытые внутри ОС
Нет, не скрытые.
РФ, телеком.
Я заебался прогать. Эликсир топ, все дела, но само по себе программирование, как работа не устраивает. Изучать, преподавать, баловаться иногда, да, 40 часов в неделю думать о нём неприятно.
Я Senior. Мне плотят 12к$, проект не в РФ, большой и сложный ecommerce с аукционами, сложным поиском, лайвстримингом и всем таким
>большой и сложный ecommerce с аукционами, сложным поиском, лайвстримингом и всем таким
Не заебался? Или ты за деньги хуй будешь?
Реально ли вкатиться в эту вашу, без хорошего английского(то есть в рф)?
И можно ли пинать хуи?
Короче волчистость.
>А какой у него плюс перед сри/сри++? Зачем? Чтобы. Что?
Можно посадить тучу мартышек и у них даже что-то будет получаться.
Плачу 1% потому что живу и зареган в Грузии. В РФ платил бы ~20%, но здесь я призывник и хуй деньги вообще получу
> Не заебался?
Конечно заебался, это же работа
> Или ты за деньги хуй будешь?
Да я и бесплатно буду
> Реально ли вкатиться в эту вашу, без хорошего английского(то есть в рф)?
Да, конечно. Денег в РФ столько платят только в финтехе или на очень высоких позициях в средних/крупных проектах. Поэтому лучше учить английский.
Вообще, современный мир так устроен, что твой уровень профессионального скилла определяет где-то ну 30% твоей зарплаты. Знание языка, таймзона, разрешение на работу в определённой стране, простые человеческие качества типа умения общаться с людьми нормально и так далее определяют 70% всего твоего успеха.
Как пример, знаю чувака который патчи в cpython пишет регулярно. Зарабатывает ~150к рублей на говнопроекте в Питере в душном офисе, где даже ноги не вытянуть. И знаю просто социоблядного чувака, который тока вкатился на Go, и по визе талантов пробился в грейт британ, хорошо знает английский и гребёт где-то 7-8к фунтов в месяц (1кк рублей примерно) на позиции джуна, и ещё живёт не в мухосрани
> И можно ли пинать хуи?
Конечно можно, но делать так, чтобы за это не уволили и вообще может даже ещё похвалили, это мастерство, которое приходит только с опытом или еврейской кровью при рождении
https://habr.com/ru/companies/netologyru/articles/841288/
Да что ты будешь делать