Сегодня хочу рассказать тебе о прекрасном функциональном языке для написания неубиваемых распределённых систем, а более конкретно вебни на бэке, больших 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 Тогда следующий вопрос, какие книги посоветуешь, и что, на твой взгляд, можно такого запилить чтобы впечатлить нанимателя не прибегая к нетворкингу?