Elixir — функциональный, распределённый язык программирования общего назначения, работающий на виртуальной машине Erlang (BEAM). Обеспечивает распределённость, отказоустойчивость, исполнение в режиме мягкого реального времени, метапрограммирование с макросами и полиморфизмом, реализованным через протоколы.
Elixir успешно применяется в Discord, Facebook, WhatsApp, Pinterest и в куче других крупных проектов.
Первые две - мастхэв для новичков (можно читать любую из), так как дают основы языка и вообще функционального программирования, что особенно полезно для перекотов из императивных языков. Вторые две - набор best practice.
>>1596407 Ну конечно, давайте ещё сравним зарплаты на Кложуре и на Джаве. Когда сам создатель давал статистику по Кложе на одной конфе: там 80% сеньйоры с 5-10 годами опыта, поэтому зп в 2-3 раза выше средней по джаве на ваших графиках.
Какие преимущества перед Эрлангом кроме синтаксиса и феникса?
>>1596490 Макросы, протоколы, Task, Agent, Registry, Stream, GenStage/Flow/Broadway, DynamicSupervisor, некоторые удобные конструкции типа with, StreamData, ExUnit лучше чем оба говнофреймворка для тестов в ерланге, formatter, наличие нормального линтера, простые нативные релизы, mix/hex лучше, чем пердолинг с ребаром и в целом большее количество либ и фреймворков. Это то что сходу пошли в голову.
>>1596407 >Самая высокая медианная зарплата у разработчиков Elixir — 165 000 рублей. Чет проигрунькал в голосинушку на всю квартиру! Ты бы еще сравнил с Clojure или Scala, где джунов считай почти нет, мидлов - хуй да нихуя, а сениоры как раз преобладают в выборке. Из-за этого и выходит, что на подобных языках медиана будет в 150-180 за полумидла-недосиниора. А синиоры уже зашибают по 250-300к. Так что не вводи анонасов в заблуждение. Язык достаточно посредственный. Вебню какую-нибудь клепать - самое оно.
>>1596600 Единственный плюс ерланга по сравнению с Elixir: отсутствие ruby-refugees, которые не разобравшись с языком начинают пытатся напердолить некое подобие оопе абузя макросы где попало. Ну и ебанутое мышление с gem install huipizda вместо здравого смысла.
>>1597375 Ну есть же системы где он юзается, которые сложнее прошивок для роутеров, например вся Riak инфраструктура, DynamoDB, Demonware-сервера, джаббер, рэббитмк.
Ну и Максим Сохатский с тобой бы не согласился правда он шизик МИНИМАЛИЗМ, БЫСТРОТА ПРОТОТИПИРОВАНИЯ, УПРАВЛЯЕМОСТЬ, ПРОСТОТА
>>1597835 >не слышал про нормальную культуру тестов >выбирает пердолинг с типами >кодовая база стала в 3раза больше >куд-кудах типы сошлись значит работает >все равно ловит ошибку, потому что перепутал номер карты с идентификационным кодом >let it crash нинужон >весь код в трай/кетчах и прочей defensive параше, все равно приложение падает от рандомной потери пакета на магистрали >uptime <90% >захотел попрограммировать на акторах >Akka урезанное говно без блокирующих вызовов(sic!) >без типов >хочешь взять Typed Akka >ещё более урезанное, до сих пор в стадии experimental >взял Cloud Haskell >ничего не работает >зато типы
>>1597846 >>все равно ловит ошибку, потому что перепутал номер карты с идентификационным кодом решается через value classes, если ты о Scala
>>весь код в трай/кетчах и прочей defensive параше, все равно приложение падает от рандомной потери пакета на магистрали если ты пишешь на Java, то да, там принято пробрасывать исключения и обрабатывать их в try/catch. В Scala используют тип Try или Either.
>>Akka урезанное говно без блокирующих вызовов(sic!) блокирующие вызовы там имеются, только их никто не использует в продакшене, т.к. ты повесишь поток, на котором могут исполнятся другие акторы
>>хочешь взять Typed Akka >ещё более урезанное, до сих пор в стадии experimental Akka Typed уже давно не experimental и находится в стабильной ветке.
>>1596379 (OP) Зачем перекатываться на язык одного фреймворка? Ведь на Elixir ничего кроме вебни не пишут. А если и пишут, то в 90% случаев это переписывание проектов с Ruby/RoR. Ведь для этого языка даже нет адекватной поддержки IDE какой-нибудь IntelliJ IDEA с плагином. Только какие-то мутные плагины для VS Code, которые покрывают дай бог 10% функционала. Считай одна подсветка синтаксиса да и только.
>>1598058 >нет адекватной поддержки IDE Зачем IDE для elixir?
>>1598058 >язык одного фреймворка? Ведь на Elixir ничего кроме вебни не пишут Микросервисы всякие без phoenix пишутся и вполне збс. Мне чаще приходится писать без феникса, чем с ним.
>>1597914 >с сисярпа/пистона за две недели перекотился в элик Считай что похоронил карьеру разработчика. Теперь будет ковыряться в помойном проекте, который котиков показывает и бояться сменить работу, т.к. компаний, который используют эликсир - хуй да нихуя.
>>1598070 >Зачем IDE для elixir? Автодополнение и intelisense по коду проекта и подключенным библиотекам. Интеграция со системой сборки и библиотеками для тестирования - чтобы я мог прогнать тесты из IDE, посмотреть на упавшие тесты и щелчком мыши перейти на них. Какая-никакая поддержка со стороны IDE, которая подсветит некорректное использование функции/метода или неверный переданный тип еще до того как я соберу проект и запущу его. Много чего. Ты никогда не пользовался IDE?
>>1597993 >решается через value classes, если ты о Scala
>пердолишь отдельный тип данных на каждую пиздюльку >спустя пол года разработки всё в кастомных типах, никто нихуя не понимает >стоимость поддержки возрастает настолько, что обгоняет проект со 100% бихейвер-тест покрытием
>В Scala используют тип Try или Either. Лучше чем исключения, но всё равно defensive, плюс всё заврапано-переврапано.
>блокирующие вызовы там имеются, только их никто не использует в продакшене, т.к. ты повесишь поток, на котором могут исполнятся другие акторы Я про это и говорю. В Erlang/Elixir такой проблемы нет.
>Akka Typed уже давно не experimental и находится в стабильной ветке. This module is currently marked as may change in the sense of being the subject of active research. This means that API or semantics can change without warning or deprecation period and it is not recommended to use this module in production just yet—you have been warned.
>>1598076 Ни то что на питоне/сишарпе - сплошной рокет-саенс. Как раз на эликсире относительное количество интересных проектов больше, чем на питоне или сишарпе. Олсо, ты так пишешь, как будто это какой-то необратимый переход и нет возможности вернутся назад или перекатиться куда-то ещё.
>>1598058 >Ведь на Elixir ничего кроме вебни не пишут. Пишут в основном апи-сервисы, которые уже или в скором времени нужно будет активно скейлить. Так же сервисы где много межпроцессвого взаимодействия или много всяких хитрых процессов в бекграунде.
>Ведь для этого языка даже нет адекватной поддержки IDE какой-нибудь IntelliJ IDEA с плагином. Так плагин для идеи есть, весьма неплохой, уже много лет регулярных релизов.
Пользовался, но мне кажется, что она реально нужна для монстров типа Java, а на всякой лайтовой хуйне сач ас elixir, ruby, python можно и в обычном редакторе с подсветочкой хуярить спокойно.
>>1598100 В чем лайтовость-то, лол? Или ты мне предлагаешь запоминать имена всех методов и функций в библиотеках? А тут раз - и тебе выдали список доступных для вызова функций и подсказали типы (лул) и порядок аргументов с возвращаемым значением.
>>1598079 > >>пердолишь отдельный тип данных на каждую пиздюльку >>спустя пол года разработки всё в кастомных типах, никто нихуя не понимает >>стоимость поддержки возрастает настолько, что обгоняет проект со 100% бихейвер-тест покрытием > Ну, это уже какой-то манямирок, если честно. А как ты себе представляешь решение проблемы, которую ты описал? А твой наезд на Try/Either просто не от большого ума. Подобные типы обрабатываются через pattern matching и for-comprehension.
>>1598082 Похихикал в шепот с твоих "интересных проектов". Открыл эликсирджобс, открыл полтора десятка вакансий на эликсире - один сплошной веб, где нужно либо пилить что-то на phoenix, либо требуется знание ruby/ror и опять phoenix, лул. На эрланге в основном проекты от телеком сектора, которые пилят какие-то мутные прошивки роутеров и прочий шлак где нужно гонять байтики из сокета в сокет.
>>1598082 >Олсо, ты так пишешь, как будто это какой-то необратимый переход и нет возможности вернутся назад или перекатиться куда-то ещё. Ну, так и есть, если ты включишь голову хоть ненадолго. Кому захочется нанимать микрочелика, который знатно так деграднул на разработке помойных веб-проектов на одном фреймворке, лол.
>>1598126 Возможно ты прав. Лет 6 назад я накатил RubyMine на свой древний комп - оно там люто лагало и я с тех пор пишу в легких редакторах и да, запоминаю функции и всю хуйню, лол. Вероятно, я многое упустил, игнорируя IDE, а может и нет - больше запоминал все это время.
>>1598134 А что и на чем ты пишешь на работе? Не доебываюсь - всегда было интересно, чем таким крутым занимаются чуваки, которые воротятся от web-разработки как от говна.
Вообще, web это же не только CRUDы всякие клепать безостановочно - для такого elixir и не нужен. Тут же фишка в том, что ты не формы пишешь, а масштабируемое, распределенное приложение, которое на нескольких серверах ебошит и обрабатывает дохуя запросов, считаю, что это вполне благородное занятие и далеко не любая обезьяна сможет делать такое же.
>>1598128 Это решается обычной культурой тестирования.
>Подобные типы обрабатываются через pattern matching и for-comprehension. Дело в том, что их теперь нужно везде обрабатывать и писать код который их будет учитывать.
>>1598134 Зачем брать Elixir для простого веба, если на RoR можно пердолить фичи намного быстрее? А те кто с RoR переписывают на Elixir значит делают это не просто так, видать у них уже не совсем простой веб.
>>1598164 Т.е. иными словами, ты предлагаешь перенести часть работы компилятора на плечи разработчика и чтобы он раз за разом покрывал подобные случаи тестами. Думаю, что мне сложно будет донести мою точку зрения, т.к. ты никогда не работал над действительно крупным проектом, над которым трудится десяток-другой разработчиков.
>>1598168 Elixir супербыстр на подобных задачах из-за BEAM. Эта же виртуальная машина позволяет тебе держать условный миллион-другой активных подключений от клиентов и раздавать им данные.
>>1598144 Железо нынче стоит неприлично дешево. AMD подогнало многоядерные процессоры за недорого. Память стоит как никогда дешево. Мне мое психическое здоровье дороже. Еще бы запоминать все сигнатуры методов и боятся ошибиться, когда мне IDE подскажет нужный метод на раз-два.
Если оба поста твои, то на всякий случай обращаю твое внимание на то, что на скриншоте запущен эрланговый repl и elixir в нем, очевидно, работать не будет
>>1598177 Ну ты сравнил. Просто для интереса поинтересуйся как реализован GC в Go и в BEAM. В BEAM у тебя сборка мусора происходит без STW и мусор собирается отдельно для каждой нити/потока. В Go до недавнего времени даже сборщика мусора по поколениям не было. Он по КД тормозил всю программу и сканировал весь хип на предмет мертвых ссылок.
>>1598173 Я работал в конторе на пол тысячи рыл у которой ровно проект, и большая часть бекенд разработки там была на Elixir, так что хуёвая ты ванга.
Типы конечно же повышают надёжность, но за это нужно платить, при этом они всё равно не заменяют написания тестов и не гарантируют ~100% аптайм. бтв в Elixir есть типы и статический анализатор, просто как и в кложе они опциональны.
>>1598218 Твои аргументы смешны. Чем платить-то? Больше кода писать? Так type inference уже даже в Java завезли, что уж говорить о Scala. Заворачивание проблемного кода в Try/Either дело одной строки. А обработка подобных кейсов через for-comprehension и pattern matching - дает тебе возможность не указывать типы, но при этом безопасно обрабатывать ошибки. Твой Эликсир с Эрлангом вообще про другое. Но ты видимо бывший похапешник, который никогда не писал на функциональных языках со строгой статической типизацией.
>>1598259 Типичный бред статикодебила, который про динамику слышал только из страшных сказок. Это твои "аргументы" смешны, но можешь дальше заниматься самогипнозом. Я на статике писал и сделал сознательный в пользу динамики. Вместо елма кложурскрипт, вместо скалы эликсир, а ты можешь дальше жрать говно на своей статикопараше, это твой выбор. В каждый кложа/эликсир тред обязательно залетает очередной статикодебил, каждый раз его кормят говном и каждый раз он сливается.
>>1598288 Ты просто фанатик, который ничего не понимает в программировании. На динамикопараше он видите ли пишет отказоустойчивые приложения, лул! Слушай сюда - обработать HTTP запрос, сходить в базу и выплюнуть JSON - это не отказоустойчивый и высоконагруженный сервис, дурачок.
>>1598371 Чет проиграл с твоего самозаовна. >ой, а тут нужно было число передать! >ой, а тут нужно было список чисел передать! >ну ничего, сейчас тесты напишу!
>>1598393 Ты сельский что-ли? Поди в каком-нибудь Иркутске живешь. Ты хоть на недельку выберись в столицу - посмотри как люди по-настоящему программируют и деньги зарабатывают. Что ты тут носишься со своей динамикодрисней и борщами, лол?
>>1598173 >Т.е. иными словами, ты предлагаешь перенести часть работы компилятора на плечи разработчика и чтобы он раз за разом покрывал подобные случаи тестами. Тесты поведения стоят на ступень выше любых проверок типов и уже валидируют все, что могли в теории отловить типы. Тем более с TDD, где каждая строчка кода выполняется тестами по определению. Зачем мне добавлять анальный нул-чек в функцию, если а) все возможные вызовы к этой функции в программе протестированы б) null - не часть публичного интерфейса данной функции?
> НЕТ РАБОТЫ! Вакансий мало, но они есть и они хорошие. У меня на нескольких сайтах висит резюме с опытом почти 4 года - почти каждую неделю пишут на email HRы, иногда несколько раз, а иногда настойчиво просят ответить хотя бы отказом, чтобы они знали, что я прочитал письмо. Мало людей пишет на elixir, поэтому ты почти со старта достаточно востребованный специалист. Палю годноту.
> ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ!!!! Иногда хочется, чтобы была статическая, да, но в целом это вообще никак ощутимо не мешает при работе - редко что-то падает. Ебашь guard'ы где надо, приводи типы, пиши спеки, юзай dialyser.
> ТОЛЬКО ДЛЯ WEB. WEB НИНУЖОН! >>1598153 >Вообще, web это же не только CRUDы всякие клепать безостановочно - для такого elixir и не нужен. Тут же фишка в том, что ты не формы пишешь, а масштабируемое, распределенное приложение, которое на нескольких серверах ебошит и обрабатывает дохуя запросов, считаю, что это вполне благородное занятие и далеко не любая обезьяна сможет делать такое же.
Можно буквально одной командой соединить две ноды, находящиеся на разных серверах, на разных частях света и спокойно взаимодействовать между ними.
Master/Slave одним конфигом в 10 строк, если не меньше, делается.
Elixir умеет равномерно загружать все ядра на твоей железяке без проблем и лишнего кода.
Но там много лишней хуйни, поэтому проще написать самому. Регистрация понятно как делается, ничего особенного, а аутентификация делается изи через plug на ~50 строк.
>>1598771 Выглядит как оверинжиринг этот ваш элик, если на нем все вот так вот пишется. Еще меня смущает отсутствие циклов и что вместо них надо использовать рекурсию, это правда?
>>1598808 Может есть какие-то книжки/сайты/статьи, где бы императивщикам на пальцах объяснялось функциональное программирование и декларативный подход?
>>1598810 рекурсия это ссылки функции самой на себя, хвостовая рекурсия это возврат в исходную точку в конце вычислений, второе предпочтительнее так как не надо раскручивать стек.
>>1598496 >поэтому ты почти со старта достаточно востребованный специалист. >висит резюме с опытом почти 4 года Хех, мда, как бы тебе сказать, мдэээ...
>>1598801 >Еще меня смущает отсутствие циклов list comprehensions/high-order functions >вместо них надо использовать рекурсию Чистая рекурсия в функциональных языках почти всегда является антипаттерном, единственный оправданный случай ее использования, который я могу придумать - это проход по вложенным структурам данных с произвольной глубиной.
>>1598801 Циклы и мутабельные структуры - это говнарская параша, чел. Используй стандартные комбинаторы или for-comprehensions. Мысли описательными цепочками трансформаций, а не императивщиной ёбаной.
>>1599102 Двачую. Еще не очень нравится, когда в языке начинают менять семантику общеизвестных конструкций, в данном случае ++ и <> - тут это конкатенация списков и строк.
Кейворд-лист - это просто синтаксический сахар, мне лично нравится определение пары как a: b, особенно учитывая что кейврод листы нужны только чтобы передавать список опций для функции типа call(a, b, c: 1, d: 2, e: 3).
>>1598983 >Чистая рекурсия в функциональных языках почти всегда является антипаттерном, единственный оправданный случай ее использования, который я могу придумать - это проход по вложенным структурам данных с произвольной глубиной. Ты будешь сильно удивлен, когда узнаешь, как устроены списки в Erlang/Elixir, лол. И что стоит за твоим лист компрехеншн, лул.
>>1599156 Они за тем и спрятаны внутрь стандартной библиотеки, чтобы можно было пользоваться нормальными абстракциями, а не хуярить нечитабельную мамрекурсию.
>>1599162 Ты так ничего и не понял. Ты типичный ruby-ребенок или php-недоумок, который не знает как работает язык под капотом. Неудивительно, что работодатели берут кого попало, главное, чтобы челик смог осилить Elixir за неделю и кое-как писал с использованием единственного фреймворка, лул. Это мне напоминает Озон, который как сумасшедший переманивал разработчиков на Go...
List comprehension преобразуется в обычную рекурсивную функцию. Правда там ещё компилятор смотрит нужно ли строить список или нет. lists:map не смотрит, например.
Но вообще этот >>1599162 прав зачем пердолить рекурсии там где можно юзать стандартный комбинатор, когда это возможно.
Т.к. Ruby-тред потонул, а здесь 100% сидят опытные рубисты, спрошу про Ruby. Пробую на зуб многопоточность через Thread.new, в примерах из гугла везде стоит join после создания тредов. Я почитал что он делает, но всё равно не понимаю нужен ли он, потому что все запросы отрабатывают ещё до того, как он вызывается (?!).
Например, при вставке в pry
threads = [] 4.times do |i| threads << Thread.new do uri = URI.parse("http://www.google.com/sitemap.xml") res = Net::HTTP.get_response(uri) puts res.code end end
все треды сразу запускаются и коды ответов появляются ещё до того, как я добавлю threads.each(&:join). Собственно, зачем мне нужен/не нужен join при распараллеливании HTTP-запросов?
>>1599786 Всё, дошло, это внутри REPL треды отрабатывают, а если запустить скриптом, то главный тред завершится раньше детей. Всем спасибо. Переведите код на Elixir для сравнения синтаксиса, если не сложно.
>>1601132 Вторую не рекомендую, сам по ней переезжал с руби на эликсир, лучше бы просто почитал гайд на оф. сайте, там то же самое, только не устарело и не размазано на 400 страниц хуйни. А отдельная книга по фреймворку это вообще пушка конечно.
>>1601225 Я хочу начать с квик-старта по Фениксу с помощью книги, т.к. для получения работы обычно нужен хоть какой-то опыт с Фениксом. А после задрочить язык с помощью Programming Elixir 1.6. Разумный путь? Когда-то так же с рельсами поступал: стартанул с Rails guides, потом задрочил "Ruby programming language" Матца.
>>1602035 Уже выяснили, что 50 вакансий от фанбокса, который размещает одну и ту же вакансию в различных городах, т.к. ищет удаленного elixir разработчика. Остальные 5 вакансий - это Senior Ruby Developer со знанием Elixir и 1 или 2 вакансии, где Elixir не является основным языком разработки и указан только как дополнительное пожелание к кандидату. Итого у тебя ровно 1 вакансия чистого Elixir разработчика от компании, которая выдает тестовое задание, а затем пропадает и не отвечает тебе, лол.
Ух какой же он охуенный, дрочу на него переодичеки, недавно написал чатик на сокетах. Хотелось бы перекатиться, но без существенной потери дохода это практически не возможно.
>>1606634 Только TCP дружок на уровень ниже находится. Иди щеголяй своими знаниями за пределами данного треда.
по сабжу - элик неплох, но в домашнем пользовании и в других делах - мало либ. Когда завезут хотя бы чуть больше репов чем в руби - тогда и можно будет смотреть. Но синтаксис неплох, хотя и не дотягивает до свифта ( к примеру )
У меня есть две таблицы. Таблица A - заявка. И таблица - Б - характеристика заявки.
Как организовать связи в таблице мне понятно, я с этим справился. Подскажите как правильно выполнить сохранение в базу. Так чтобы одним запросом создавалась заявка и к ней подсвязывались собственно характеристики. Можно просто ссылку, на пример. А то я гугли, но что-то ничего не нашел дельного по своему вопросу, хотя задача вроде тривиальная же.
>>1608368 >для поиска работы первым языком плохая Мне больше для прокачки в целом. Пробую js, узнал про "функциональный подход", решил, что надо еще какой нибудь язык по серьезней в пару взять.
>>1606955 >Когда завезут хотя бы чуть больше репов чем в руби - тогда и можно будет смотреть Какие либы нужны? Как раз думаю, что бы такого запилить в опен сорс
>>1609597 У Эликсира высокий порог входа, да и ФП не панацея ни разу - просто еще один хитровыебанный способ писать программы ни как фсе. Наиболее удобный язык на мой взгляд - это такой, в котором можно комбинировать разные стили, потому что есть задачи, которые горазды проще и изящнее решать императивно, а есть наоборот. В этом смысле JS (а лучше TS) волне хороший язык, если следовать лучшим практикам на нем.
>>1611626 >В этом смысле JS (а лучше TS) волне хороший язык, если следовать лучшим практикам на нем. а кровь из глаз не идет от приведения типов? и мутабельности в многопотоке?
>>1611636 Не weakly. И там есть анонимная типизация и опциональный тайпчекер.
Лучше приведи пример бекенд задачи, где ООП удобнее. Для работы с массивным стейтом в Elixir есть целый парк различных стратегий процессов, а для остального я хз.
>>1611661 >Вот честно, бесит немного синтаксис Эликсира, Не просто бесит, а вымораживает этот мешок сахара + сахар феникса + вагон сахара от экто - в итоге вообще невозможно запомнить, где, что и как писать без лазания в доки.
>>1611665 Я начал делать свой пэт на элике в декабре - до сих пор не закончил, да и желания возвращаться нет. В начале февраля по приколу начал на гоше писать по выходным - щас проект почти готов. На гоше испытал давно забытое чувство (после пхп, жс, питона), когда программу пишешь, компилишь, запускаешь - и она блин работает сразу.
>>1612022 Попробывал кстати, таки зашло. Мне просто депрессивно все эти формочки шлепать, а тут теорию типо подключать нужно на каждую html кнопку, отличненько-с.
>>1612138 Я не уверен, но функция определяется по количеству аргументов. То есть foo(List) и foo(List, fun) это две разные, и потом pattern-matching происходит, то есть количество аргументов нужно чтобы понять какую функцию ты хочешь.
>>1612189 Хуйня аргумент. Когда ты вызываешь foo с нужной арностью элик сам знает какую нужно вызвать. С чего нельзя так же сделать и с лямбдами, передаешь имя и, в зависимости от количества аргументов, вызывается нужная функция. Алсо, пиздец горит от того, что вызов лямбды отличается от вызова функции. Вот нахуя?
>>1612274 >вызов лямбды отличается от вызова функции. Вот нахуя? Это только на первый взгляд кажется ненужной фичей, но на самом деле в функциональном языке очень удобно иметь возможность отличать статичную функцию(в модуле, на который ты объявляешь прямую зависимость) от динамической(которая передана как аргумент), иначе получится жопаскрипт.
>>1612281 Удобно для чего? Сколько я не писал на окамле, никогда не было необходимости для меня лично отличать лямбда это или функция ибо и то и другое функции. Наводит на мысль, что в элике лямбды не настоящие функции.
>>1612285 Точку при вызове поставить не сложно, и обычно она дает возможность визуально отличить часть внешнего API(переданные тебе лямбды) от внутреннего(используемые тобой функции). Это конечно очень минорная вещь и вкусовщина, но бывает полезно. Если же у тебя вопрос "почему так сделано", то мог бы и в гугле найти - https://elixirforum.com/t/anonymous-functions-the-dot-and-parameters/10886/7
>>1612138 Если у тебя есть foo/1 и foo/2, ты можешь захотеть вызвать foo/2 и забыть передать второй аргумент. В таком случае я хотел бы получить ошибку сразу, а не давать эликсиру самому что-то неявно решать, в результате чего ошибка пройдёт дальше.
>>1612828 Да, на популярных языках полно проектов, но как правило это легаси с говнокодом. Да еще и очередь выстраивается на вакансию.
На элике работы вроде бы меньше, но проекты качественнее, интереснее, больше адекватных заказчиков, готовых неплохо платить. И гораздо меньше конкуренция, поэтому будет проще устроиться, если ты специалист.
>>1612839 >больше адекватных заказчиков, готовых неплохо платить а нахер им но нейм язык,чаще они вообще не понимают на каком это ЯП будет,лишь бы работало
Есть пэт-проект на фениксе. Хочу подключить редис и в действиях контроллера выполнять запросы к нему. Вопрос - где хранить подключение к редису? Щас я просто для теста делаю эту строчку в начале каждой функции контроллера:
{:ok, redis_conn} = Redix.start_link
Будь это ООП, я бы взял DI-контейнер и внедрил зависимость, а как тут?
>>1614340 Сейчас бы учить Elixir, чтобы устроиться по найму и педалить вебню на фениксе за мелкий прайс. Когда можно запилить собственную биржу или платформу для трейдинга с микросекундными задержками.
>>1614340 Вообще-то нужен. Феникс по большому счёту нужен только для написания веб API, и то не для всего, например, для graphql свой фреймворк идет. Если у тебя весь бекенд - это просто REST API прокладка для базы + сервер авторизации, то кроме феникса можно ничего не знать, но это редкость.
>>1614497 >Scal'y Абсолютно чудовищный язык. Плохо абсолютно все, начиная от самого языка, который по сложности можно сравнить скомбинировав C++ Haskell и Brainfuck. Заканчивая качеством IDE, библиотек и прочего тулинга, который спотыкается на простейших кейсах и всячески портит тебе жизнь как разработчику. Пытаться перекатиться на данный язык может либо убер джава сениор с минимум 8 годами опыта в топовых конторах, либо мамкин любитель борщей, который прознал, что на Scala можно педалить pure FP. Количество вакансий в стране можно перечислить по пальцам одной руки, и везде требуются люди уже с коммерческим опытом разработки - джуны и перекатывальщики с Java не нужны.
>Clojure Отсутствие вакансий. Язык намного проще чем Scala, но не проще Erlang/Elixir. Используется преимущественно для клепания вебни мелкого пошиба.
>>1614576 Ты просто никогда не писал на Scala, но что-то тут пукаешь в треде. Ты еще приведи пример размер спецификации языка, которая меньше Java, но почему то проблем с компилятором и сложность языка говорит об обратном.
>>1614571 >Количество вакансий в стране можно перечислить по пальцам одной руки, и везде требуются люди уже с коммерческим опытом разработки - джуны и перекатывальщики с Java не нужны. А как же Олежа? Каждые три месяца курсы для студентов БЕСПЛАТНЫЕ.
>>1614662 Не знаю зачем Нижник этой хуйней занимается. Вместо того, чтобы переманивать джавистов на Scala, они берут нулевых студней и пытаются научить их писать pure FP код на Scala.
>>1614571 >Язык намного проще чем Scala, но не проще Erlang/Elixir Это же лисп, он вообще своеобразный, код в виде аст, всякие дефтайпы, рекорды, мультиметоды, да код маленький получается в объеме но думать надо больше.
>>1614886 Куда к "вам" то? Вам не нужны люди с опытом. А ваше зубодробительное собеседования я все равно не пройду. Сами же пишете, что нужны люди с продакшен опытом разработки на Scala. Перестаньте дурить народ и возвращайтесь к своим студентам!
>>1614892 >Вам не нужны люди с опытом. >Сами же пишете, что нужны люди с продакшен опытом разработки на Scala. ТЫ лично не пройдешь потому что ты отбитый нахуй Остальные пройдут при желании
>>1617831 Там нет процессов. Из коробки только нейтив треды, программировать на которых что-то имеющее больше, чем два потока - оче неприятно. Есть либы типа дистраптора, которые немного упрощают жизнь, но всё равно говно. Ещё есть Akka, но она больше из расчёта на Scala сделана и джава мирке не особо популярна.
>>1617982 Они друг другу ортогональны. У тебя может быть асинхронная однопоточность, или не-асинхронная параллельность и всё вместе или ничего из.
>где больше производительность Смотря какая задача решается. Если нужно просто матрицы перебошить, то нужна обычная многопоточность (допустим через MMP или вообще OpenCL). А если допустим по хитрому алгоритму перекладывать данные по потокам - то тут уже без годной асинхронной (конкурентной) модели не обойтись.
>>1618032 Скала выразительнее как язык, там продвинутая система типов, доступ к явалибам и общий перформанс у JVM выше чем на BEAM. Кроме этого, редкие места, требующие оптимизации, можно переписать мутабельным кодом.
>>1618126 >там продвинутая система типов Не плюс. >общий перформанс у JVM выше чем на BEAM Спорное утверждение, "общий перформанс" чего? Для распределенной системы ты не найдешь более проверенной и быстрой платформы, чем OTP, а если "перформанс" подразумевает под собой перекладывание чисел, то это все равно не в скалу. >Кроме этого, редкие места, требующие оптимизации, можно переписать мутабельным кодом. ...но лучше переписать их на си, ассемблер, го, раст и прочее, как это делается везде.
>>1618126 >Скала выразительнее как язык Если под выразительностью ты понимаешь количество фич в языке, тогда да, пожалуй соглашусь. Если Erlang/Elixir + OTP учится условно за несколько недель максимум пару месяцев, то на Scala можно убить от полугода до года, чтобы начать работать с языком на уровне Java++. Т.е. я не говорю о pure FP подходе и использовании сторонних либ от typelevel. На изучение Akka ты еще потратишь добрых пару месяцев пока дойдешь до момента, когда сможешь собрать небольшой проект.
>доступ к явалибам и общий перформанс у JVM выше чем на BEAM Ну мы же с тобой понимаем, что Erlang/Elixir берут не за чистый перформанс в плане числодробилки, а из-за BEAM и его способности автоматически скейлится по ядрам и писать распределенные приложения без боли. Если тебе так важна производительность в плане числодробилки, то ты всегда можешь подключить к своему коду на Erlang/Elixir нативный модуль через NIF/Ports. Так сделали ребята из Demonware, например. Я не говорю уже о STW в JVM GC, которые останавливают все потоки в твоем приложении, чтобы собрать мусор. BEAM умеет собирать мусор по процессам, не останавливая все приложение.
>Кроме этого, редкие места, требующие оптимизации, можно переписать мутабельным кодом. Тут мы снова возвращаемся к тебе о нужности Scala как языка. Если тебе так критичен перформанс, что ты можешь забить на функциональный подход и начать лепить сайд-эффекты (хотя я прекрасно понимаю, что та же стандартная библиотека коллекций в Scala на 99% состоит из императивного кода с сайд-эффектами), то может быть и не стоило ее использовать изначально? Видно же, что платформа не тащит функциональный код, а для написания императивного кода всегда можно взять тот же Kotlin или последнюю версию Java.
Это я еще не затронул тему поддержки со стороны IDE, качество популярных библиотек и фреймворков. Erlang/Elixir просты как дважды два, поддержкой этих языков в той же IDEA занимаются два человека - один поддерживает Erlang плагин, другой - Elixir плагин. При этом там все работает и багов практически нет. Если ты хоть раз пытался написать что-нибудь сложнее Hello World на Scala в IDEA, то наверное в курсе как плохо она перемалывает код на Scala. Т.е. там могут не работать вполне себе очевидные вещи. Есть еще VSCode с плагином Metals, но он далек от идеала и не претендует на звание полноценной IDE. Стоит ли говорить, что тормозит он похлеще IDEA.
Что касается библиотек и фреймворков, то тут тоже не все так очевидно. Lightbend, который занимается разработкой фреймворков для Scala, могла родить только Akka, которая более-менее работает, хотя не претендует на pure FP подход. Play можно сказать уже похороинили. Slick так и не стал де-факто FRM либой для Scala стека. Lightbend это знает и чтобы не терять клиентуру набросала Lagom - фреймворк-комбайн, который в первую очередь ориентирован на Java коммьюнити.
Typelevel стек ничем не лучше. Если ты решишь набросать простенький REST-сервис, то столкнешься с проблемой, когда Http4s не имеет множества фич и в принципе находится в т.н. инкубационном периоде. JSON парсингом занимается истеричка из Берлина, которая отказывается честно бенчмаркать свое поделие. Circe на самом деле не дотягивает до того же Jackson или GSON по количеству фич, скорости работы и простоте использования. Чего только стоит повсеместное использование неявных параметров - хуй проссышь как у тебя код работает.
Т.е. я что хочу скаать - если у тебя в планах пилить веб-сервисы, которые общаются с внешним миром по HTTP, сохраняют данные в какую-нибудь базу и делают не очень хитрую логику, то брать Scala сродни самозаовну. Ты, конечно же, можешь взять Akka (akka-http, akka-streams), Slick и попытаться на этом запустить свой сервис, но ты очень быстро столкнешься с недостатком либ к которым ты наверное уже привык если ты пишешь на той же Java (Spring) или Elixir/Erlang. Например, проблема web-security до сих пор не решена в той же Akka. Тебе нужно это пилить самому, когда та же самая проблема решается десятью строками кода на Java + Spring.
>>1618147 1) Поскольку на языках без типов уже много лет прекрасно пишут продакшен приложения, то доказывать их полезность надо тем, кто за эти типы топит, а не наоборот. 2) Тесты поведения уже проверяют все то, что могли отловить типы, и если в проекте следуют TDD, то нужность типов сводится к нулю, только букв больше печатать.
>>1618358 >Поскольку на чем то пишут, значит оно лучше остальных Типичная логика нетипизированной бляди, ору БОльшая часть серьезного тырпрайза крутится на жаве, шарпе, скале, плюсах и прочем. В ноджс завезли тайпскрипт чтобы на крупных проектах не страдать. Но раз уж хипстеры в стартапах и телекоме хуярят без типов, то так уж и быть, убедил. >Тесты проверяют Замечательно. А теперь представь что все тесты на типы за тебя пишет компилятор и ИДЕ моментально бьёт тебя по рукам при попытке написать некорректный код. Охуеть как заебись же, да?
Раз уж тут эксперты собрались, поясните за Ocsigen/OCaml для своего недо-стартапа? Там либ не очень много, но они качественней и покрывают основные нужды. Вроде и многопоток писать можно.
>>1618786 >Борщи не борщи! >Мааам, неси борщец! >Борщик-борщик, борщец мой любимый! Ты это, давай прекращай там херней заниматься. Не видишь тут люди промышленные языки программирования обсуждают, а не твой никому ненужный мегаборщ окамл, лул!
>>1618175 >Erlang/Elixir просты как дважды два, поддержкой этих языков в той же IDEA занимаются два человека - один поддерживает Erlang плагин, другой - Elixir плагин. При этом там все работает и багов практически нет. Только вот там кроме подсветки синтаксиса (очень тормозной) не работает ничего. В VSCode немного получше, но тоже очень грустно.
Допустим, я мидлоповидло в другом мейнстримовом ЯПе, я могу перейти на эликсир не дропаясь в зп? Англюсик б2 есть для работы, могу и на удаленку и в переезд, что один раз уже сделал.
>>1619282 >Только вот там кроме подсветки синтаксиса (очень тормозной) не работает ничего. ??? У меня работает там всё что заявлено в плагине и релиз нотах: Syntax highlighting and semantic annotation Grammar Parsing (So good, it found bugs in the native Elixir tokenizer and parser) Inspections with Quick Fixes Code Folding Commenter File Templates Graphical Debugger - works on all Run Configurations Breakpoints (in .ex and .eex file) Stepping Stack Frames Go up and Down stack without stepping program Collapse and expanded nested data structures in local variables Evaluate code in any frame in Evaluator Customizable Module Filters Delimiter/Brace Auto-insertion Delimiter/Brace Matching Embedded Elixir (EEx) Templates Compilation Decompilation Dissassembly BEAM Chunks viewer Run Configurations Distillery Release CLI Elixir Elixir Mix Elixir Mix ExUnit IEx IEx Mix Completion Module Names Aliases in Elixir Source Atoms in Elixir Source Decompiled Aliases from .beam files (Elixir SDK, Erlang SDK, and _build) Decompiled Atoms from .beam files (Elixir SDK, Erlang SDK, and _build) Function and Macro Names Elixir Source Decompiled from .beam files (Elixir SDK, Erlang SDK, and _build) Module Attributes Parameters and Variables Formatting Go To Definition (of macro or function from usage) Symbol Module Aliases (Source or Decompiled) Function and Macro Names (Source or Decompiled) Test Test Subject Find Usage Refactor Rename Moduel Attribute Parameters and Variables Spellchecking Dictionaries for common dependencies: Elixir Ecto
>>1618455 >БОльшая часть серьезного тырпрайза крутится на жаве, шарпе, скале, плюсах Сразу видно дурачка, который свои не подкрепленные ничем предубеждения считает за автоматическую правду. На жаве может быть, но бОльшая часть "серьезного тырпрайза" на жабе - это легаси из времен, когда жава была языком всего, и это легаси ты бы не захотел трогать даже палкой. Остальное - чисто твои фантазии на уровне "сирьезные дяди пишут на сирьиезных языках вроде хаскеля и си крест". >А теперь представь что все тесты на типы за тебя пишет компилятор и ИДЕ "тесты на типы" не пишутся практически никогда. А если ты найдешь мне IDE, которая может за меня писать тест "если вызвать этот эндпоинт с таким сетапом в базе и такими параметрами, то вернется такой результат", то я сразу же на нее перейду.
>>1624240 Я шизик, который пытался писать веб на ОКамле, там фреймпорк даже есть. Но 5-часовой ебли с подключением дб и сидением в make файлах и разбором компиляции заставили меня все таки начать делать пет-проекты на Эликсире. И таки просто глоток свежего воздуха. Похуй уже на динамические типы даже. Да и выбирать вот реально не из чего сегодня. Не на шарпе, пэхэпэ или пайтоне писать же.
>>1624275 Хочу тоже перекатиться, но пугает малое количество вакансий. Как вообще искать их, и насколько безболезненно можно свичнуться без потери по зарплате ?
>>1624488 >ООП не нужно >Будем хранить пользовательские типы в хешмапе >user = {"userId" -> "huitka", "account" -> {"account_type" -> "zalupka"}} >user.get("user_id") >NPE >да что ты будешь делать, так падажжии >user.get("userid") >NPE >да ебанарот, так, как там было поле названо?! а, во! >user.get("acount") >NPE >не гневайтесь Алексей Михалыч, сейчас все поправим! >user.get("account") >воо, заработало!
>>1624418 Обычно вкатываются так: параллельно основной работе на другом языке учат Elixir, пилят учебные проекты, коммитят в либы на гитхабе, пишут свои, в своей конторе говорят - вот я изучаю Elixir, хотел бы на нём работать, если будет возможность. Когда в контору заходит потенциальный проект на Elixir, то менеджеры знают, что у нас есть такой-то чел, который мог бы взяться.
>>1624902 Иногда заходят на пробу и смотрят как пойдёт. Если норм, то потом уже подписывается долгий контракт, под это дело нанимаются еще разработчики, или берутся изнутри компании те, кто хотели бы вкатиться.
>>1624927 Тогда писать на чём дают и мониторить вакансии, иногда бывает набирают на Elixir людей без коммерческого опыта конкретно на нём, но с опытом на других зыках и в той же предметной области.
>>1625005 Ну так ты сам привёл дохуя условий, которые мешают тебе это делать. Скажу банальность, но чтоб что-то по существу изменить, нужно хоть немного покинуть зону комфорта, а отмазки можно придумывать до бесконечности.
>>1625911 Ну если ты такой лузер, то да. В текущей конторе где я работаю вкатываются даже 20летние джеесеры. А в предыдущей людей вообще с улицы брали, правда там был ебейщий курс интернатуры, с менторами уровня Elixir Core Team.
>>1625945 >В текущей конторе где я работаю вкатываются даже 20летние джеесеры. А в предыдущей людей вообще с улицы брали, правда там был ебейщий курс интернатуры, с менторами уровня Elixir Core Team. Ну так им терять нечего, ни зп ни стажа нет
>>1628198 >эрланг для бедных. Боль Эрланг недоумка совсем незаметна, лул. Акка полностью портировала ОТП библиотеку, плюс накинула еще целый ворох интеграций и прочих библиотек для работы с данными. А ты и дальше продолжай переключать телефонные свитчи...
>>1628268 В этом треде уже писали, что может Ерланг, чего не может Акка, и это знает каждый кто работал и с тем и с тем, или знает как акторы реализованы на обоих платформах. Для таких людей разница очевидна. Спорить с дауном, который писал в лучшем случае на акке нет смысла и интереса. Я ещё в 2013 тут нагибал шлаккадрочеров и тогда это было хотя бы забавно, но сейчас просто иди нахуй.
>>1642476 Двачую этого, вот этот весь хипстерский сахарок бесит. Я уже писал об этом, но ебаные do end - это же те же самые всеми любимые C { }, только смузи version. Уебищные :atom key:, или как там, вместо эрланговского atom.
>>1642487 Чел, тебя уже тут несколько раз обоссали. Успокойся. Как бы там ни было, по сравнению с криптической ерлангопарашей, где ошибку длинней 1 строчки в терминале без крови из глаз прочитать невозможно, это всё равно намного лучше. Это я говорю как человек, который до еликсира 2 года писал на ерланге продакшн код.
Может ли модуль иметь поведение генсервера и супервайзера одновременно? То есть можно ли ебануть use GenServer use Supervisor и чтобы всё работало.
Что делать, если мне нужен генсервер, порождающий процессы и перезапускающий их в случае чего (например, генсервер - лобби игры создает процесс с игровой сессией)?
>>1769169 Но зачем? APL даже сам по себе не настолько мёртв. К тому же есть опенсорсный J, и проприетарный K.
На кого будет ориентирован этот язык? Никаких плюсов и вообще идей нового языка/диалекта перед APL в статье не написано.
Плюс APL был как раз в системе набора, использующей почти всю клавиатуру. Без этого он становится write-only, т.к. со скудным количеством ASCII-символов, которые можно набрать с клавиатуры, добавляются диграфы и триграфы - и один и тот же глиф может обозначать кучу разного в зависимости от соседних знаков, когда в APL значение одно и может зависеть только от числа аргументов (монадические/диадические функции, и то только у половины символики). А ради ньюфагов они от этого откажутся.
Аноны, а какие-нибудь дженерик книги по функциональщине посоветуете? А то чёт прочёл Elixir in Action от Юрича, прочёл Programming Phoenix, работаю заебись, но хочется прям академически знаний в функциональном программировании поднабрать. Ну или best practices побольше.
Постестили перформанс на рэббите, там буст порядка 40%. В целом автор проекта говорит что на разных тестах разных приложений он получал буст от 30 до 135% по производительности. Так что поздравляю всех эрлангистов, эликсирщиков и прочих пользователей BEAM.
>>1845644 Прикольно, что с JITом обычный jason стал уделывать jiffy, которая NIF на няшной. Завтра поставлю себе дев версию, надеюсь удастся повыбрасывать некоторые NIFы что мы на работке понаписали, заменив их обычным эрланг/эликсир кодом.
Пишу фронтенд на ember (тоже дитя руби мира), захотелось попробовать новый язык, просто как хобби проект. Выбрать эликсир и писать на нем rest для формочек-табличек это не совсем бессмыслица?
>>1982487 Норм, мой первый проект на эликсире был где-то в 2015 ember + phoenix, мне понравилось. В эмбере , насколько помню, много хорошего с json-api было связанно, в эликсире есть норм либа для его поддержки. Помимо этого видел где-то еще пару проектов на связке феникс + эмбер, хотя сейчас такого меньше, сейчас в качестве протокола чаще берут GraphQL + Relay и на фронте реакт. Лично я последний раз рестовую апишку видел в 2017.