Это копия, сохраненная 26 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Elixir успешно применяется в Discord, Facebook, WhatsApp, Pinterest и в куче других крупных проектов.
Для вката:
- Официальный док: https://elixir-lang.org/getting-started/introduction.html
- Уроки программирования на языке Elixir (на русском): https://elixirschool.com/ru/
- Часовое видео на англе с основами синтаксиса: https://www.youtube.com/watch?v=pBNOavRoNL0
- Phoenix (основной веб-фреймворк) - https://hexdocs.pm/phoenix/overview.html
Книжки:
- Introducing Elixir
- Programming Elixir 1.6
- Elixir in Action
- Adopting Elixir
Первые две - мастхэв для новичков (можно читать любую из), так как дают основы языка и вообще функционального программирования, что особенно полезно для перекотов из императивных языков. Вторые две - набор best practice.
Работа:
https://elixirjob.ru/
Уютненький чатик:
https://telegram.me/joinchat/ApEh7z9DAAIwCR9icUbYuQ
На сколько эликсир перспективен в плане трудоустройства?
Зарплаты в ИТ во втором полугодии 2019 года: по данным калькулятора Хабр Карьеры:
https://habr.com/ru/company/habr_career/blog/485146/
Самая высокая медианная зарплата у разработчиков Elixir — 165 000 рублей.
Как же охуенно, буду вкатываться
Только что-то на том графике ни одной зарплаты выше 200к у эликсира нету. Как-то НИОЧЕНЬ.
мимо300крубист
> функциональное программирование
> язык с динамической типизацией
Что-то здесь явно не так
И что же?
Всё так. Вместо генериков, вариантов, вывода типов и подобного у тебя будут уточки.
Ну конечно, давайте ещё сравним зарплаты на Кложуре и на Джаве. Когда сам создатель давал статистику по Кложе на одной конфе: там 80% сеньйоры с 5-10 годами опыта, поэтому зп в 2-3 раза выше средней по джаве на ваших графиках.
Какие преимущества перед Эрлангом кроме синтаксиса и феникса?
>Какие преимущества перед Эрлангом кроме синтаксиса и феникса?
Туллинг, более живое сообщество, более активное развитие.
Он лучше джавы для бэкенда?
Смотря какие у тебя задачи. Джава быстрее, но на elixir/phoenix приятней писать, как по мне.
По большей части нет. Нужно знать особенности BEAM - виртуальной машины, на которой работает Elixir.
Не лучше и не хуже - разные области применения.
Макросы, протоколы, Task, Agent, Registry, Stream, GenStage/Flow/Broadway, DynamicSupervisor, некоторые удобные конструкции типа with, StreamData, ExUnit лучше чем оба говнофреймворка для тестов в ерланге, formatter, наличие нормального линтера, простые нативные релизы, mix/hex лучше, чем пердолинг с ребаром и в целом большее количество либ и фреймворков. Это то что сходу пошли в голову.
>Discord
Да они все более менее новое бегут применять в продакшене. Вон недавно с Go на Rust переписали.
Зачем они это делают?
Их хуйню сам б-г велел на erlang написать, но зачем писать что-то новое на erlang, когда есть elixir?
Завтра появится какой-то новый модный язык inb4:Crystal и они на него побегут переписывать.
Больные люди там работают.
Так скажем, это было бы плюсом, но для вката - не обязательно.
Просто многое из того что эрлангисты уже знают тебе прийдется изучить с нуля.
Да.
>Самая высокая медианная зарплата у разработчиков Elixir — 165 000 рублей.
Чет проигрунькал в голосинушку на всю квартиру! Ты бы еще сравнил с Clojure или Scala, где джунов считай почти нет, мидлов - хуй да нихуя, а сениоры как раз преобладают в выборке. Из-за этого и выходит, что на подобных языках медиана будет в 150-180 за полумидла-недосиниора. А синиоры уже зашибают по 250-300к.
Так что не вводи анонасов в заблуждение. Язык достаточно посредственный. Вебню какую-нибудь клепать - самое оно.
Единственный плюс ерланга по сравнению с Elixir:
отсутствие ruby-refugees, которые не разобравшись с языком начинают пытатся напердолить некое подобие оопе абузя макросы где попало. Ну и ебанутое мышление с gem install huipizda вместо здравого смысла.
двачую
Эрланг же совсем поносный язык. Его разве что для перекладывания байтиков из сокета в сокет можно использовать.
Ну есть же системы где он юзается, которые сложнее прошивок для роутеров, например вся Riak инфраструктура, DynamoDB, Demonware-сервера, джаббер, рэббитмк.
Ну и Максим Сохатский с тобой бы не согласился правда он шизик
МИНИМАЛИЗМ, БЫСТРОТА ПРОТОТИПИРОВАНИЯ, УПРАВЛЯЕМОСТЬ, ПРОСТОТА
>Динамика
>Жидко пукнув умираешь от несоответствия типов
>Супервайзер тебя воскрешает
>Жидко пукнув умираешь до бесконечности
>не слышал про нормальную культуру тестов
>выбирает пердолинг с типами
>кодовая база стала в 3раза больше
>куд-кудах типы сошлись значит работает
>все равно ловит ошибку, потому что перепутал номер карты с идентификационным кодом
>let it crash нинужон
>весь код в трай/кетчах и прочей defensive параше, все равно приложение падает от рандомной потери пакета на магистрали
>uptime <90%
>захотел попрограммировать на акторах
>Akka урезанное говно без блокирующих вызовов(sic!)
>без типов
>хочешь взять Typed Akka
>ещё более урезанное, до сих пор в стадии experimental
>взял Cloud Haskell
>ничего не работает
>зато типы
моча
баловство
Тут чел пишет, что с сисярпа/пистона за две недели перекотился в элик
https://habr.com/ru/post/435796/
>>все равно ловит ошибку, потому что перепутал номер карты с идентификационным кодом
решается через value classes, если ты о Scala
>>весь код в трай/кетчах и прочей defensive параше, все равно приложение падает от рандомной потери пакета на магистрали
если ты пишешь на Java, то да, там принято пробрасывать исключения и обрабатывать их в try/catch. В Scala используют тип Try или Either.
>>Akka урезанное говно без блокирующих вызовов(sic!)
блокирующие вызовы там имеются, только их никто не использует в продакшене, т.к. ты повесишь поток, на котором могут исполнятся другие акторы
>>хочешь взять Typed Akka
>ещё более урезанное, до сих пор в стадии experimental
Akka Typed уже давно не experimental и находится в стабильной ветке.
Зачем перекатываться на язык одного фреймворка? Ведь на Elixir ничего кроме вебни не пишут. А если и пишут, то в 90% случаев это переписывание проектов с Ruby/RoR.
Ведь для этого языка даже нет адекватной поддержки IDE какой-нибудь IntelliJ IDEA с плагином. Только какие-то мутные плагины для VS Code, которые покрывают дай бог 10% функционала. Считай одна подсветка синтаксиса да и только.
нинужна
>с сисярпа/пистона за две недели перекотился в элик
Считай что похоронил карьеру разработчика. Теперь будет ковыряться в помойном проекте, который котиков показывает и бояться сменить работу, т.к. компаний, который используют эликсир - хуй да нихуя.
>Зачем IDE для elixir?
Автодополнение и intelisense по коду проекта и подключенным библиотекам. Интеграция со системой сборки и библиотеками для тестирования - чтобы я мог прогнать тесты из IDE, посмотреть на упавшие тесты и щелчком мыши перейти на них. Какая-никакая поддержка со стороны IDE, которая подсветит некорректное использование функции/метода или неверный переданный тип еще до того как я соберу проект и запущу его. Много чего. Ты никогда не пользовался IDE?
>решается через 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.
https://doc.akka.io/docs/akka/2.5.6/scala/typed.html
Ни то что на питоне/сишарпе - сплошной рокет-саенс.
Как раз на эликсире относительное количество интересных проектов больше, чем на питоне или сишарпе.
Олсо, ты так пишешь, как будто это какой-то необратимый переход и нет возможности вернутся назад или перекатиться куда-то ещё.
>Ведь на Elixir ничего кроме вебни не пишут.
Пишут в основном апи-сервисы, которые уже или в скором времени нужно будет активно скейлить. Так же сервисы где много межпроцессвого взаимодействия или много всяких хитрых процессов в бекграунде.
>Ведь для этого языка даже нет адекватной поддержки IDE какой-нибудь IntelliJ IDEA с плагином.
Так плагин для идеи есть, весьма неплохой, уже много лет регулярных релизов.
Пользовался, но мне кажется, что она реально нужна для монстров типа Java, а на всякой лайтовой хуйне сач ас elixir, ruby, python можно и в обычном редакторе с подсветочкой хуярить спокойно.
В чем лайтовость-то, лол? Или ты мне предлагаешь запоминать имена всех методов и функций в библиотеках? А тут раз - и тебе выдали список доступных для вызова функций и подсказали типы (лул) и порядок аргументов с возвращаемым значением.
Короче, ты притащил старую версию Акки, если ты не догнал.
>
>>пердолишь отдельный тип данных на каждую пиздюльку
>>спустя пол года разработки всё в кастомных типах, никто нихуя не понимает
>>стоимость поддержки возрастает настолько, что обгоняет проект со 100% бихейвер-тест покрытием
>
Ну, это уже какой-то манямирок, если честно. А как ты себе представляешь решение проблемы, которую ты описал? А твой наезд на Try/Either просто не от большого ума. Подобные типы обрабатываются через pattern matching и for-comprehension.
Похихикал в шепот с твоих "интересных проектов". Открыл эликсирджобс, открыл полтора десятка вакансий на эликсире - один сплошной веб, где нужно либо пилить что-то на phoenix, либо требуется знание ruby/ror и опять phoenix, лул. На эрланге в основном проекты от телеком сектора, которые пилят какие-то мутные прошивки роутеров и прочий шлак где нужно гонять байтики из сокета в сокет.
>Олсо, ты так пишешь, как будто это какой-то необратимый переход и нет возможности вернутся назад или перекатиться куда-то ещё.
Ну, так и есть, если ты включишь голову хоть ненадолго. Кому захочется нанимать микрочелика, который знатно так деграднул на разработке помойных веб-проектов на одном фреймворке, лол.
Смотри, как бы не пришлось прикручивать C++ код через NIF как это сделали ребята из Daemonware, лол.
Возможно ты прав. Лет 6 назад я накатил RubyMine на свой древний комп - оно там люто лагало и я с тех пор пишу в легких редакторах и да, запоминаю функции и всю хуйню, лол. Вероятно, я многое упустил, игнорируя IDE, а может и нет - больше запоминал все это время.
А что и на чем ты пишешь на работе? Не доебываюсь - всегда было интересно, чем таким крутым занимаются чуваки, которые воротятся от web-разработки как от говна.
Вообще, web это же не только CRUDы всякие клепать безостановочно - для такого elixir и не нужен. Тут же фишка в том, что ты не формы пишешь, а масштабируемое, распределенное приложение, которое на нескольких серверах ебошит и обрабатывает дохуя запросов, считаю, что это вполне благородное занятие и далеко не любая обезьяна сможет делать такое же.
Ну какую-нибудь пошаговую херню BEAM точно потянет.
Это решается обычной культурой тестирования.
>Подобные типы обрабатываются через pattern matching и for-comprehension.
Дело в том, что их теперь нужно везде обрабатывать и писать код который их будет учитывать.
Зачем брать Elixir для простого веба, если на RoR можно пердолить фичи намного быстрее? А те кто с RoR переписывают на Elixir значит делают это не просто так, видать у них уже не совсем простой веб.
На питоне подавляющее большинство проектов - макакинг на джанге, а на сисярпе - унылый тырпрайз, так что никакой деградации.
Т.е. иными словами, ты предлагаешь перенести часть работы компилятора на плечи разработчика и чтобы он раз за разом покрывал подобные случаи тестами.
Думаю, что мне сложно будет донести мою точку зрения, т.к. ты никогда не работал над действительно крупным проектом, над которым трудится десяток-другой разработчиков.
Elixir супербыстр на подобных задачах из-за BEAM. Эта же виртуальная машина позволяет тебе держать условный миллион-другой активных подключений от клиентов и раздавать им данные.
Железо нынче стоит неприлично дешево. AMD подогнало многоядерные процессоры за недорого. Память стоит как никогда дешево. Мне мое психическое здоровье дороже. Еще бы запоминать все сигнатуры методов и боятся ошибиться, когда мне IDE подскажет нужный метод на раз-два.
Но ты спросил в elixir треде как писать hello world, пытаясь сделать это на эрланге и не уточнив это
Согласен. Раньше был один, но уже давно утонул и кто-то создал только для elixir.
Ну ты сравнил. Просто для интереса поинтересуйся как реализован GC в Go и в BEAM. В BEAM у тебя сборка мусора происходит без STW и мусор собирается отдельно для каждой нити/потока. В Go до недавнего времени даже сборщика мусора по поколениям не было. Он по КД тормозил всю программу и сканировал весь хип на предмет мертвых ссылок.
Я работал в конторе на пол тысячи рыл у которой ровно проект, и большая часть бекенд разработки там была на Elixir, так что хуёвая ты ванга.
Типы конечно же повышают надёжность, но за это нужно платить, при этом они всё равно не заменяют написания тестов и не гарантируют ~100% аптайм.
бтв в Elixir есть типы и статический анализатор, просто как и в кложе они опциональны.
я в душе не ебу,я пхпешник,го прос на слуху,типо ультрабыстр и многопоточен
>в кложе они опциональны.
в кложе можно указать компилятору типы примитивов, кроме хешей, иначе он использует рефлекшен.
Твои аргументы смешны. Чем платить-то? Больше кода писать? Так type inference уже даже в Java завезли, что уж говорить о Scala. Заворачивание проблемного кода в Try/Either дело одной строки. А обработка подобных кейсов через for-comprehension и pattern matching - дает тебе возможность не указывать типы, но при этом безопасно обрабатывать ошибки.
Твой Эликсир с Эрлангом вообще про другое. Но ты видимо бывший похапешник, который никогда не писал на функциональных языках со строгой статической типизацией.
Типичный бред статикодебила, который про динамику слышал только из страшных сказок. Это твои "аргументы" смешны, но можешь дальше заниматься самогипнозом.
Я на статике писал и сделал сознательный в пользу динамики. Вместо елма кложурскрипт, вместо скалы эликсир, а ты можешь дальше жрать говно на своей статикопараше, это твой выбор.
В каждый кложа/эликсир тред обязательно залетает очередной статикодебил, каждый раз его кормят говном и каждый раз он сливается.
Ты просто фанатик, который ничего не понимает в программировании. На динамикопараше он видите ли пишет отказоустойчивые приложения, лул! Слушай сюда - обработать HTTP запрос, сходить в базу и выплюнуть JSON - это не отказоустойчивый и высоконагруженный сервис, дурачок.
замена рубям
https://nerves-project.org/
Чет проиграл с твоего самозаовна.
>ой, а тут нужно было число передать!
>ой, а тут нужно было список чисел передать!
>ну ничего, сейчас тесты напишу!
Уебан который кодирует каждый инт и стринг в приложении кастомным типом, это ты?
Олсо, тесты пишутся сразу, еблан. Нет тестов - нет фичи, и это безотносительно типизации.
А чего ты сразу агришься то? Ты еще и ТДД-шизик, который сначала пишет тесты-тестики. Таких уже ничего не спасет.
Можешь не писать тесты, но твой развесистый пердолинг на типчиках от ошибок тебя равно не спасёт.
О чем нормальные люди знают, поэтому в том же Haskell есть
HUnit, QuickCheck, SmallCheck, HSpeс и так далее.
Ты сельский что-ли? Поди в каком-нибудь Иркутске живешь. Ты хоть на недельку выберись в столицу - посмотри как люди по-настоящему программируют и деньги зарабатывают. Что ты тут носишься со своей динамикодрисней и борщами, лол?
>Т.е. иными словами, ты предлагаешь перенести часть работы компилятора на плечи разработчика и чтобы он раз за разом покрывал подобные случаи тестами.
Тесты поведения стоят на ступень выше любых проверок типов и уже валидируют все, что могли в теории отловить типы. Тем более с TDD, где каждая строчка кода выполняется тестами по определению. Зачем мне добавлять анальный нул-чек в функцию, если а) все возможные вызовы к этой функции в программе протестированы б) null - не часть публичного интерфейса данной функции?
Алсо:
> НЕТ РАБОТЫ!
Вакансий мало, но они есть и они хорошие. У меня на нескольких сайтах висит резюме с опытом почти 4 года - почти каждую неделю пишут на email HRы, иногда несколько раз, а иногда настойчиво просят ответить хотя бы отказом, чтобы они знали, что я прочитал письмо. Мало людей пишет на elixir, поэтому ты почти со старта достаточно востребованный специалист. Палю годноту.
> ДИНАМИЧЕСКАЯ ТИПИЗАЦИЯ!!!!
Иногда хочется, чтобы была статическая, да, но в целом это вообще никак ощутимо не мешает при работе - редко что-то падает. Ебашь guard'ы где надо, приводи типы, пиши спеки, юзай dialyser.
> ТОЛЬКО ДЛЯ WEB. WEB НИНУЖОН!
>>598153
>Вообще, web это же не только CRUDы всякие клепать безостановочно - для такого elixir и не нужен. Тут же фишка в том, что ты не формы пишешь, а масштабируемое, распределенное приложение, которое на нескольких серверах ебошит и обрабатывает дохуя запросов, считаю, что это вполне благородное занятие и далеко не любая обезьяна сможет делать такое же.
Можно буквально одной командой соединить две ноды, находящиеся на разных серверах, на разных частях света и спокойно взаимодействовать между ними.
Master/Slave одним конфигом в 10 строк, если не меньше, делается.
Elixir умеет равномерно загружать все ядра на твоей железяке без проблем и лишнего кода.
запилить авторизацию и регистрацию на сайте можно без геммора?
Относительно мало, конечно. Относительно PHP, Java, Python и т.д.
Есть всякие либы типа https://github.com/ueberauth/guardian
Но там много лишней хуйни, поэтому проще написать самому. Регистрация понятно как делается, ничего особенного, а аутентификация делается изи через plug на ~50 строк.
https://hex.pm/ говорит, что 10351 либа опубликована сейчас. Плюс ты можешь юзать все, что было написано на эрлангах и не опубликовано в hex.
Если JWT не нужен, то можно юзать обычный Phoenix.Token
Да.
я конечно не эрлангист,но чет слишком просто выглядит
Не знаю, зачем я это написал, но подивитесь!
Красава.
Я и говорил про передачу аргумента, которая ненужна.
Это чтобы задать дефолтное значение второго аргумента.
Когда у тебя одинаковая функция, но много разных сигнатур то оно так заедается.
Выглядит как оверинжиринг этот ваш элик, если на нем все вот так вот пишется. Еще меня смущает отсутствие циклов и что вместо них надо использовать рекурсию, это правда?
Мне не проще. Мозг ломается, когда пытаюсь даже примитивные вещи осмыслить через рекурсию - всегда ее избегал.
Может есть какие-то книжки/сайты/статьи, где бы императивщикам на пальцах объяснялось функциональное программирование и декларативный подход?
рекурсия это ссылки функции самой на себя, хвостовая рекурсия это возврат в исходную точку в конце вычислений, второе предпочтительнее так как не надо раскручивать стек.
Я знаю, что такое рекурсия. Речь о большей сложности построения рекурсивных алгоритмов по сравнению с итеративными.
Тебе престарелые мамка с папкой квартирку подогнали, а ты сидишь там на каких-то мутных дядей работаешь, Андрей.
>поэтому ты почти со старта достаточно востребованный специалист.
>висит резюме с опытом почти 4 года
Хех, мда, как бы тебе сказать, мдэээ...
Ну как бы ты понял где обосрался, да? 4 года опыта в Elixir, на котором никто не пишет. Ясен-красен тебе все пишут, лол.
>Еще меня смущает отсутствие циклов
list comprehensions/high-order functions
>вместо них надо использовать рекурсию
Чистая рекурсия в функциональных языках почти всегда является антипаттерном, единственный оправданный случай ее использования, который я могу придумать - это проход по вложенным структурам данных с произвольной глубиной.
Ну так пишут мне уже далеко не первый год
Циклы и мутабельные структуры - это говнарская параша, чел.
Используй стандартные комбинаторы или for-comprehensions. Мысли описательными цепочками трансформаций, а не императивщиной ёбаной.
описал еблет твоей мамки
>iex> list = [{:a, 1}, {:b, 2}]
>[a: 1, b: 2]
>iex> list == [a: 1, b: 2]
Ещё постоянные def/do/end от рубистов напрягают.
>Discord, Facebook, WhatsApp, Pinterest
Что характерно, каждый из этих сервисов представляет из себя жуткий лагодром.
Двачую. Еще не очень нравится, когда в языке начинают менять семантику общеизвестных конструкций, в данном случае ++ и <> - тут это конкатенация списков и строк.
У меня на райзене лагает.
Не понял предъявы.
Кейворд-лист - это просто синтаксический сахар, мне лично нравится определение пары как a: b, особенно учитывая что кейврод листы нужны только чтобы передавать список опций для функции типа call(a, b, c: 1, d: 2, e: 3).
Не нравится, делай на туплах.
>Чистая рекурсия в функциональных языках почти всегда является антипаттерном, единственный оправданный случай ее использования, который я могу придумать - это проход по вложенным структурам данных с произвольной глубиной.
Ты будешь сильно удивлен, когда узнаешь, как устроены списки в Erlang/Elixir, лол. И что стоит за твоим лист компрехеншн, лул.
Они за тем и спрятаны внутрь стандартной библиотеки, чтобы можно было пользоваться нормальными абстракциями, а не хуярить нечитабельную мамрекурсию.
Ты так ничего и не понял. Ты типичный ruby-ребенок или php-недоумок, который не знает как работает язык под капотом. Неудивительно, что работодатели берут кого попало, главное, чтобы челик смог осилить Elixir за неделю и кое-как писал с использованием единственного фреймворка, лул.
Это мне напоминает Озон, который как сумасшедший переманивал разработчиков на Go...
lists:map не смотрит, например.
Но вообще этот >>599162 прав
зачем пердолить рекурсии там где можно юзать стандартный комбинатор, когда это возможно.
Многие великие люди были из глубинки, стереотипный мудак.
тут видимо чтение доков го
Возможность иметь читабельный код в проектах, которые чуть больше серверной прокладки.
Например, при вставке в 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-запросов?
Всё, дошло, это внутри REPL треды отрабатывают, а если запустить скриптом, то главный тред завершится раньше детей. Всем спасибо. Переведите код на Elixir для сравнения синтаксиса, если не сложно.
http://media.pragprog.com/titles/elixir/ElixirCheat.pdf
Learn X in Y minutes для Elixir на русском:
https://learnxinyminutes.com/docs/ru-ru/elixir-ru/
(из РФ может быть недоступно)
https://github.com/h4cc/awesome-elixir
Кодить лучше всего в любой IDE от JetBrains (есть плагин для Elixir, часто обновляется) или VS Code (достаточно только одного расширения - ElixirLS).
Вторую не рекомендую, сам по ней переезжал с руби на эликсир, лучше бы просто почитал гайд на оф. сайте, там то же самое, только не устарело и не размазано на 400 страниц хуйни. А отдельная книга по фреймворку это вообще пушка конечно.
Я хочу начать с квик-старта по Фениксу с помощью книги, т.к. для получения работы обычно нужен хоть какой-то опыт с Фениксом. А после задрочить язык с помощью Programming Elixir 1.6. Разумный путь?
Когда-то так же с рельсами поступал: стартанул с Rails guides, потом задрочил "Ruby programming language" Матца.
И да, спасибо.
А куда работать-то? В рашке только фанбокс есть, но тебя туда не возьмут, да и странные они.
265
Нет.
Тогда утверждение о том, что работы нет, неверно.
Она для продвинутых.
Уже выяснили, что 50 вакансий от фанбокса, который размещает одну и ту же вакансию в различных городах, т.к. ищет удаленного elixir разработчика. Остальные 5 вакансий - это Senior Ruby Developer со знанием Elixir и 1 или 2 вакансии, где Elixir не является основным языком разработки и указан только как дополнительное пожелание к кандидату. Итого у тебя ровно 1 вакансия чистого Elixir разработчика от компании, которая выдает тестовое задание, а затем пропадает и не отвечает тебе, лол.
Мимо Senior Java макака
Только TCP дружок на уровень ниже находится. Иди щеголяй своими знаниями за пределами данного треда.
по сабжу - элик неплох, но в домашнем пользовании и в других делах - мало либ. Когда завезут хотя бы чуть больше репов чем в руби - тогда и можно будет смотреть. Но синтаксис неплох, хотя и не дотягивает до свифта ( к примеру )
>это надстройка над TCP
>TCP на уровень ниже находится
Ну спасибо что поправил, дружок.
> Иди щеголяй
Ты пьяный что-ли? Я на вопрос лолкана ответил.
>мало либ
Каких либ тебе не хватает к примеру? Просто интересно.
У меня есть две таблицы. Таблица A - заявка. И таблица - Б - характеристика заявки.
Как организовать связи в таблице мне понятно, я с этим справился. Подскажите как правильно выполнить сохранение в базу.
Так чтобы одним запросом создавалась заявка и к ней подсвязывались собственно характеристики.
Можно просто ссылку, на пример. А то я гугли, но что-то ничего не нашел дельного по своему вопросу, хотя задача вроде тривиальная же.
Использую Ecto ну и Phoenix
upd. В чатике спрашивать такие даунские вопросы страшно
Так, там нет примеров как именно связанные данные заливать? Или я жопой читал?
>для поиска работы первым языком плохая
Мне больше для прокачки в целом. Пробую js, узнал про "функциональный подход", решил, что надо еще какой нибудь язык по серьезней в пару взять.
пупок не развяжется
>Когда завезут хотя бы чуть больше репов чем в руби - тогда и можно будет смотреть
Какие либы нужны? Как раз думаю, что бы такого запилить в опен сорс
У Эликсира высокий порог входа, да и ФП не панацея ни разу - просто еще один хитровыебанный способ писать программы ни как фсе. Наиболее удобный язык на мой взгляд - это такой, в котором можно комбинировать разные стили, потому что есть задачи, которые горазды проще и изящнее решать императивно, а есть наоборот. В этом смысле JS (а лучше TS) волне хороший язык, если следовать лучшим практикам на нем.
>В этом смысле JS (а лучше TS) волне хороший язык, если следовать лучшим практикам на нем.
а кровь из глаз не идет от приведения типов? и мутабельности в многопотоке?
>и мутабельности в многопотоке?
Нужен пример на обоих языках для сравнения
>а кровь из глаз не идет от приведения типов?
Не понял, о чем речь. Elixir такой же weakly dynamically typed, как и JS.
Не weakly. И там есть анонимная типизация и опциональный тайпчекер.
Лучше приведи пример бекенд задачи, где ООП удобнее. Для работы с массивным стейтом в Elixir есть целый парк различных стратегий процессов, а для остального я хз.
Но по факту, вот я хочу выбрать себе платформу для пет-веб проекта, и кроме Эликсира/Феникса пока ни к чему не могу прийти. Не на node же писать.
Выбор падает на Эликсир из-за коммьюнити, ФП, производительности и наличия основных тулов для продакшена.
>Вот честно, бесит немного синтаксис Эликсира,
Не просто бесит, а вымораживает этот мешок сахара + сахар феникса + вагон сахара от экто - в итоге вообще невозможно запомнить, где, что и как писать без лазания в доки.
Я начал делать свой пэт на элике в декабре - до сих пор не закончил, да и желания возвращаться нет. В начале февраля по приколу начал на гоше писать по выходным - щас проект почти готов. На гоше испытал давно забытое чувство (после пхп, жс, питона), когда программу пишешь, компилишь, запускаешь - и она блин работает сразу.
> User
> |> Repo.get!(id)
> |> Repo.preload(:addresses) # Only required when updating data
> |> Ecto.Changeset.cast(params, [])
> |> Ecto.Changeset.cast_assoc(:addresses, with: &MyApp.Address.changeset/2)
Что это за цифра 2, что вообще происходит в последней строчке?
Попробывал кстати, таки зашло. Мне просто депрессивно все эти формочки шлепать, а тут теорию типо подключать нужно на каждую html кнопку, отличненько-с.
Цифра 2 обозначает сколько аргументов у функции. А так вообще не ебу что там функция делает.
Зачем это надо? Эликсир не может посмотреть сколько аргументов передается в функцию и вызвать подходящую?
Я не уверен, но функция определяется по количеству аргументов. То есть foo(List) и foo(List, fun) это две разные, и потом pattern-matching происходит, то есть количество аргументов нужно чтобы понять какую функцию ты хочешь.
А про посмотреть сам - не знаю, мб из за дефолт аргументов конфликт возникет. Я вообще не эликсирщик если что.
Но выглядит плохо.
>&MyApp.Address.changeset/2
Это тоже самое, что и:
fn a, b -> MyApp.Address.changeset(a, b) end
Или же:
&(MyApp.Address.changeset(&1, &2))
Вариант с &.../2 самый короткий. Без /2 непонятно, сколько аргументов передавать.
или функция с разной арностью
Хуйня аргумент. Когда ты вызываешь foo с нужной арностью элик сам знает какую нужно вызвать. С чего нельзя так же сделать и с лямбдами, передаешь имя и, в зависимости от количества аргументов, вызывается нужная функция. Алсо, пиздец горит от того, что вызов лямбды отличается от вызова функции. Вот нахуя?
>вызов лямбды отличается от вызова функции. Вот нахуя?
Это только на первый взгляд кажется ненужной фичей, но на самом деле в функциональном языке очень удобно иметь возможность отличать статичную функцию(в модуле, на который ты объявляешь прямую зависимость) от динамической(которая передана как аргумент), иначе получится жопаскрипт.
Удобно для чего? Сколько я не писал на окамле, никогда не было необходимости для меня лично отличать лямбда это или функция ибо и то и другое функции. Наводит на мысль, что в элике лямбды не настоящие функции.
Точку при вызове поставить не сложно, и обычно она дает возможность визуально отличить часть внешнего API(переданные тебе лямбды) от внутреннего(используемые тобой функции). Это конечно очень минорная вещь и вкусовщина, но бывает полезно. Если же у тебя вопрос "почему так сделано", то мог бы и в гугле найти - https://elixirforum.com/t/anonymous-functions-the-dot-and-parameters/10886/7
Если у тебя есть foo/1 и foo/2, ты можешь захотеть вызвать foo/2 и забыть передать второй аргумент. В таком случае я хотел бы получить ошибку сразу, а не давать эликсиру самому что-то неявно решать, в результате чего ошибка пройдёт дальше.
>Я перекатился с руби как раз из-за привычного синтаксиса.
Ладно синтаксис, но там же онли ФП - как к этому адаптировался?
Мой уровень знания языка недостаточен для прохода на собес.
Как я и думал, это не фича а сайд-эффект хуевого дизайна.
Нет. Тут же и так баттхёртят от гипервариативности как видишь.
Олсо, когда ты делаешь импорты каких-то функций, ты опять же обязан явно указать арность (это ещё с эрланга пошло).
>вагон сахара от экто
???
Там только у Schema своя DSL (весьма простая и понятная), а в Repo/Query/Changeset/Multi/whatever обычные функции.
>ОКамл к примеру, легко читается
У тебя специфические вкусы, дружище.
У Query тоже свой DSL.
Прочитал книжку programming elixir, там в целом понятно рассказали об особенностях.
Много времени ушло на то, чтобы перестроить мозг, но этого пошло на пользу - даже на руби стал писать более чистый код.
Как смириться с фактом, что на этом борщеязыке нет работы и придется до конца дней пилить никому ненужные пет-проекты?
Да, на популярных языках полно проектов, но как правило это легаси с говнокодом. Да еще и очередь выстраивается на вакансию.
На элике работы вроде бы меньше, но проекты качественнее, интереснее, больше адекватных заказчиков, готовых неплохо платить. И гораздо меньше конкуренция, поэтому будет проще устроиться, если ты специалист.
>больше адекватных заказчиков, готовых неплохо платить
а нахер им но нейм язык,чаще они вообще не понимают на каком это ЯП будет,лишь бы работало
ну охуеть теперь
никто не запрещает
но
1.насколько оправдано это использовать
2 тяжело ли потом все это поддерживать?
>Много времени ушло на то, чтобы перестроить мозг
Стали платить больше денег?
>даже на руби стал писать более чистый код.
ФП-like код не ровно чистый.
{:ok, redis_conn} = Redix.start_link
Будь это ООП, я бы взял DI-контейнер и внедрил зависимость, а как тут?
равно*
Стартовать надо на запуске приложения, очевидно.
Для это нужно добавить его в список дочерних процессов в твоём ProjectName.Application. Если предполагается иметь один инстанс то даёшь ему имя и потом по нему обращаешься.
https://hexdocs.pm/redix/real-world-usage.html#single-named-redix-instance
Спасибо! Вроде листал этот док, но видимо было не по глазам.
Я так понял, что элик без феникса особо не нужен, и его везде требуют по умолчанию.
Сейчас бы учить Elixir, чтобы устроиться по найму и педалить вебню на фениксе за мелкий прайс. Когда можно запилить собственную биржу или платформу для трейдинга с микросекундными задержками.
Рубиребенок порвался, спешите видеть! Скорее беги заучивать эйпиай своего фуникса и пиши блоги, лул!
Вообще-то нужен.
Феникс по большому счёту нужен только для написания веб API, и то не для всего, например, для graphql свой фреймворк идет.
Если у тебя весь бекенд - это просто REST API прокладка для базы + сервер авторизации, то кроме феникса можно ничего не знать, но это редкость.
У меня именно REST API сейчас, как прокладка к редис. пробую бота писать
>Вообще-то нужен.
Например? Без подъеба, мне правда интересно
>Scal'y
Абсолютно чудовищный язык. Плохо абсолютно все, начиная от самого языка, который по сложности можно сравнить скомбинировав C++ Haskell и Brainfuck. Заканчивая качеством IDE, библиотек и прочего тулинга, который спотыкается на простейших кейсах и всячески портит тебе жизнь как разработчику. Пытаться перекатиться на данный язык может либо убер джава сениор с минимум 8 годами опыта в топовых конторах, либо мамкин любитель борщей, который прознал, что на Scala можно педалить pure FP.
Количество вакансий в стране можно перечислить по пальцам одной руки, и везде требуются люди уже с коммерческим опытом разработки - джуны и перекатывальщики с Java не нужны.
>Clojure
Отсутствие вакансий. Язык намного проще чем Scala, но не проще Erlang/Elixir. Используется преимущественно для клепания вебни мелкого пошиба.
>но не проще Erlang/Elixir
Спорное утверждение, в кложе синтаксиса вообще почти нет, что там может быть сложнее эликсира?
Ты просто никогда не писал на Scala, но что-то тут пукаешь в треде. Ты еще приведи пример размер спецификации языка, которая меньше Java, но почему то проблем с компилятором и сложность языка говорит об обратном.
>Количество вакансий в стране можно перечислить по пальцам одной руки, и везде требуются люди уже с коммерческим опытом разработки - джуны и перекатывальщики с Java не нужны.
А как же Олежа? Каждые три месяца курсы для студентов БЕСПЛАТНЫЕ.
Для эликсира вакансий на порядок меньше той же скалы
При чем тут Scala? Я спрашиваю про Erlang/Elixir
Не знаю зачем Нижник этой хуйней занимается. Вместо того, чтобы переманивать джавистов на Scala, они берут нулевых студней и пытаются научить их писать pure FP код на Scala.
Пускай тогда продолжает обучать студней, раз такое дело. Я все равно туда не пройду. Старые привычки уже не выбить, как ты сказал.
>Язык намного проще чем Scala, но не проще Erlang/Elixir
Это же лисп, он вообще своеобразный, код в виде аст, всякие дефтайпы, рекорды, мультиметоды, да код маленький получается в объеме но думать надо больше.
Тебя там говном чтоли закидали что ты уже не первую неделю бегаешь по доске и верещишь про понв и борщехлебов?
Куда к "вам" то? Вам не нужны люди с опытом. А ваше зубодробительное собеседования я все равно не пройду. Сами же пишете, что нужны люди с продакшен опытом разработки на Scala. Перестаньте дурить народ и возвращайтесь к своим студентам!
>Вам не нужны люди с опытом.
>Сами же пишете, что нужны люди с продакшен опытом разработки на Scala.
ТЫ лично не пройдешь потому что ты отбитый нахуй
Остальные пройдут при желании
Так а зачем скала когда есть те же хаскель с кложей
К ним с годом опыта .NET без опыта в эликсире реально прыгнуть, или маловато для них?
Пишешь, дают тестовое. Если норм сделал, то пригласят на собес. Все просто.
работа в репле
Там нет процессов. Из коробки только нейтив треды, программировать на которых что-то имеющее больше, чем два потока - оче неприятно. Есть либы типа дистраптора, которые немного упрощают жизнь, но всё равно говно. Ещё есть Akka, но она больше из расчёта на Scala сделана и джава мирке не особо популярна.
Спасибо, анон. За 3 потных вечера после работы разобрался с этой хуйней
Погугли за перегрузку функций
объясните мне тупому,где больше производительность-при многопоточности или асинхронности?
Они друг другу ортогональны.
У тебя может быть асинхронная однопоточность, или не-асинхронная параллельность и всё вместе или ничего из.
>где больше производительность
Смотря какая задача решается. Если нужно просто матрицы перебошить, то нужна обычная многопоточность (допустим через MMP или вообще OpenCL). А если допустим по хитрому алгоритму перекладывать данные по потокам - то тут уже без годной асинхронной (конкурентной) модели не обойтись.
Скала выразительнее как язык, там продвинутая система типов, доступ к явалибам и общий перформанс у JVM выше чем на BEAM. Кроме этого, редкие места, требующие оптимизации, можно переписать мутабельным кодом.
>там продвинутая система типов
Не плюс.
>общий перформанс у JVM выше чем на BEAM
Спорное утверждение, "общий перформанс" чего? Для распределенной системы ты не найдешь более проверенной и быстрой платформы, чем OTP, а если "перформанс" подразумевает под собой перекладывание чисел, то это все равно не в скалу.
>Кроме этого, редкие места, требующие оптимизации, можно переписать мутабельным кодом.
...но лучше переписать их на си, ассемблер, го, раст и прочее, как это делается везде.
>Скала выразительнее как язык
Если под выразительностью ты понимаешь количество фич в языке, тогда да, пожалуй соглашусь. Если 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.
>Скала выразительнее как язык
Если под выразительностью ты понимаешь количество фич в языке, тогда да, пожалуй соглашусь. Если 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.
И это говорят в эликсир-треде?
Как так вышло, что на таком охуенном языке вакансий меньше, чем на мёртвых Objective-C, Delphi и Perl?
1) Поскольку на языках без типов уже много лет прекрасно пишут продакшен приложения, то доказывать их полезность надо тем, кто за эти типы топит, а не наоборот.
2) Тесты поведения уже проверяют все то, что могли отловить типы, и если в проекте следуют TDD, то нужность типов сводится к нулю, только букв больше печатать.
>Поскольку на чем то пишут, значит оно лучше остальных
Типичная логика нетипизированной бляди, ору
БОльшая часть серьезного тырпрайза крутится на жаве, шарпе, скале, плюсах и прочем. В ноджс завезли тайпскрипт чтобы на крупных проектах не страдать. Но раз уж хипстеры в стартапах и телекоме хуярят без типов, то так уж и быть, убедил.
>Тесты проверяют
Замечательно. А теперь представь что все тесты на типы за тебя пишет компилятор и ИДЕ моментально бьёт тебя по рукам при попытке написать некорректный код. Охуеть как заебись же, да?
Да что это за языки такие "без типов", блеать? Может, в этих языках и управляющих конструкций нет???
Ты прежде чем тут свои боевые картиночки бросать хотя бы почитай про модель памяти в beam
мимокрок
Малолетний болван не понимает как работает GC в BEAM и пукает своими картиночками, лул!
>Борщи не борщи!
>Мааам, неси борщец!
>Борщик-борщик, борщец мой любимый!
Ты это, давай прекращай там херней заниматься. Не видишь тут люди промышленные языки программирования обсуждают, а не твой никому ненужный мегаборщ окамл, лул!
Прекращай травить, мерзавец!
>Erlang/Elixir просты как дважды два, поддержкой этих языков в той же IDEA занимаются два человека - один поддерживает Erlang плагин, другой - Elixir плагин. При этом там все работает и багов практически нет.
Только вот там кроме подсветки синтаксиса (очень тормозной) не работает ничего. В VSCode немного получше, но тоже очень грустно.
>Только вот там кроме подсветки синтаксиса (очень тормозной) не работает ничего.
???
У меня работает там всё что заявлено в плагине и релиз нотах:
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
>Только вот там кроме подсветки синтаксиса (очень тормозной) не работает ничего.
???
У меня работает там всё что заявлено в плагине и релиз нотах:
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
Работал в Коде, в Атоме и в Саблайме.
Торжественно заявляю, что это всё кусок говна по сравнению с плагином идеи.
Ты с плагином Scala не путай, ок да?
>БОльшая часть серьезного тырпрайза крутится на жаве, шарпе, скале, плюсах
Сразу видно дурачка, который свои не подкрепленные ничем предубеждения считает за автоматическую правду. На жаве может быть, но бОльшая часть "серьезного тырпрайза" на жабе - это легаси из времен, когда жава была языком всего, и это легаси ты бы не захотел трогать даже палкой. Остальное - чисто твои фантазии на уровне "сирьезные дяди пишут на сирьиезных языках вроде хаскеля и си крест".
>А теперь представь что все тесты на типы за тебя пишет компилятор и ИДЕ
"тесты на типы" не пишутся практически никогда. А если ты найдешь мне IDE, которая может за меня писать тест "если вызвать этот эндпоинт с таким сетапом в базе и такими параметрами, то вернется такой результат", то я сразу же на нее перейду.
УМВР. Хуй знает что у тебя там не так.
В ебаном VS Code даже Jump to definition по исходникам не работает и автокомплит супер-хуевый.
https://github.com/DarkDimius
Какая ирония! Разработчик компилятора Scala теперь занимается тем, что пишет тайпчекер для Ruby, лул! Вот до чего доводят борщи!
Особенно если их в языке нет.
Я шизик, который пытался писать веб на ОКамле, там фреймпорк даже есть. Но 5-часовой ебли с подключением дб и сидением в make файлах и разбором компиляции заставили меня все таки начать делать пет-проекты на Эликсире. И таки просто глоток свежего воздуха. Похуй уже на динамические типы даже. Да и выбирать вот реально не из чего сегодня. Не на шарпе, пэхэпэ или пайтоне писать же.
>Не на шарпе, пэхэпэ или пайтоне писать же.
Почему нет? У тебя каждый проект это хайлоад сервис с педаленьем байтов?
Хочу тоже перекатиться, но пугает малое количество вакансий. Как вообще искать их, и насколько безболезненно можно свичнуться без потери по зарплате ?
Так я не тралирую, риал интересно перекатиться. Но пока немного пугает
>ООП не нужно
>Будем хранить пользовательские типы в хешмапе
>user = {"userId" -> "huitka", "account" -> {"account_type" -> "zalupka"}}
>user.get("user_id")
>NPE
>да что ты будешь делать, так падажжии
>user.get("userid")
>NPE
>да ебанарот, так, как там было поле названо?! а, во!
>user.get("acount")
>NPE
>не гневайтесь Алексей Михалыч, сейчас все поправим!
>user.get("account")
>воо, заработало!
Обычно вкатываются так: параллельно основной работе на другом языке учат Elixir, пилят учебные проекты, коммитят в либы на гитхабе, пишут свои, в своей конторе говорят - вот я изучаю Elixir, хотел бы на нём работать, если будет возможность. Когда в контору заходит потенциальный проект на Elixir, то менеджеры знают, что у нас есть такой-то чел, который мог бы взяться.
К чему этот цирк? Если тебе нужны статические гарантии на ключи, используй структуры.
>бус фактор 1
Если там мелкий фикс-прайс проект, то чего бы и нет.
Если надо будет, то можно будет подключить ещё людей.
Может к уже готовому допилить пару фич.
Иногда заходят на пробу и смотрят как пойдёт.
Если норм, то потом уже подписывается долгий контракт, под это дело нанимаются еще разработчики, или берутся изнутри компании те, кто хотели бы вкатиться.
А если я работаю в такой конторе, где не заходят мелкие проекты, а только на овер 100 чел ?
Тогда писать на чём дают и мониторить вакансии, иногда бывает набирают на Elixir людей без коммерческого опыта конкретно на нём, но с опытом на других зыках и в той же предметной области.
Тогда продавливай Elixir у себя в конторе, для внутренних проектов или хотя бы предложи брать проекты не только на 100 чел, но и небольшие.
Как то слишком много многоходовочек нужно, что бы писать коммерческий софт на элике
Ну так ты сам привёл дохуя условий, которые мешают тебе это делать.
Скажу банальность, но чтоб что-то по существу изменить, нужно хоть немного покинуть зону комфорта, а отмазки можно придумывать до бесконечности.
>покинуть зону комфорта
И оказаться без работы, сидя на шее у престарелых родителей и наворачивать мамкин борщец!
Ну если ты такой лузер, то да.
В текущей конторе где я работаю вкатываются даже 20летние джеесеры. А в предыдущей людей вообще с улицы брали, правда там был ебейщий курс интернатуры, с менторами уровня Elixir Core Team.
>В текущей конторе где я работаю вкатываются даже 20летние джеесеры. А в предыдущей людей вообще с улицы брали, правда там был ебейщий курс интернатуры, с менторами уровня Elixir Core Team.
Ну так им терять нечего, ни зп ни стажа нет
Не общащай внимани на толстого. Как обстоят дела не только с вебом на феникс, есть ли риал хайлоада с всякими ассинхронными пайплайнами?
>эрланг для бедных.
Боль Эрланг недоумка совсем незаметна, лул. Акка полностью портировала ОТП библиотеку, плюс накинула еще целый ворох интеграций и прочих библиотек для работы с данными. А ты и дальше продолжай переключать телефонные свитчи...
В этом треде уже писали, что может Ерланг, чего не может Акка, и это знает каждый кто работал и с тем и с тем, или знает как акторы реализованы на обоих платформах. Для таких людей разница очевидна. Спорить с дауном, который писал в лучшем случае на акке нет смысла и интереса. Я ещё в 2013 тут нагибал шлаккадрочеров и тогда это было хотя бы забавно, но сейчас просто иди нахуй.
Прекращай травлю, мерзавец!
Куда ему, все на пщланг перекатились.
Пролог - лучшее что случалось с программированием, и вообще единственная вещь которая оправдывает веру в человечество.
Ты с Erlang путаешь.
Двачую этого, вот этот весь хипстерский сахарок бесит. Я уже писал об этом, но ебаные do end - это же те же самые всеми любимые C { }, только смузи version. Уебищные :atom key:, или как там, вместо эрланговского atom.
Чел, тебя уже тут несколько раз обоссали. Успокойся.
Как бы там ни было, по сравнению с криптической ерлангопарашей, где ошибку длинней 1 строчки в терминале без крови из глаз прочитать невозможно, это всё равно намного лучше. Это я говорю как человек, который до еликсира 2 года писал на ерланге продакшн код.
Что бы посоветовал написать на эликсире, чтобы понять его основные фишки и сильные стороны?
Чат с конференц-румами.
Пользоваться эликсиром.
После национализации ерланг тима сьебалась в другую контору.
Вот кстати вакансия на мидла
https://corezoid.com/jobs/
Постой. Это же тот самый банк в котором работал Максим.
Backend meetup
Ruby, GO, Rust, Node.js, Python, Elixir
https://metaconf.net/backend-meetup-2020
То есть можно ли ебануть
use GenServer
use Supervisor
и чтобы всё работало.
Что делать, если мне нужен генсервер, порождающий процессы и перезапускающий их в случае чего (например, генсервер - лобби игры создает процесс с игровой сессией)?
>Может ли модуль иметь поведение генсервера и супервайзера одновременно?
Нет. Как минимум потому что в обеих проведениях есть init/1, но его спецификация отличается. И вообще у них разные задачи.
например, генсервер - лобби игры создает процесс с игровой сессией
Ты делаешь отдельный динамический супервизор и потом создаёшь процессы через него
https://hexdocs.pm/elixir/DynamicSupervisor.html
https://hexdocs.pm/elixir/DynamicSupervisor.html#start_child/2
Или, если речь про единоразовые таски то
https://hexdocs.pm/elixir/Task.html#module-supervised-tasks
https://hexdocs.pm/elixir/Task.html#module-dynamically-supervised-tasks
Но зачем? APL даже сам по себе не настолько мёртв. К тому же есть опенсорсный J, и проприетарный K.
На кого будет ориентирован этот язык? Никаких плюсов и вообще идей нового языка/диалекта перед APL в статье не написано.
Плюс APL был как раз в системе набора, использующей почти всю клавиатуру. Без этого он становится write-only, т.к. со скудным количеством ASCII-символов, которые можно набрать с клавиатуры, добавляются диграфы и триграфы - и один и тот же глиф может обозначать кучу разного в зависимости от соседних знаков, когда в APL значение одно и может зависеть только от числа аргументов (монадические/диадические функции, и то только у половины символики). А ради ньюфагов они от этого откажутся.
Да. Сашка, ты?
почему?
Наконец-то сделали JIT для BEAM (8 лет разработки ебать), одно из редких успешных промышленных применений asmjit.
Оно будет уже в OTP-24.0
https://github.com/erlang/otp/pull/2745
https://www.erlang-solutions.com/blog/performance-testing-the-jit-compiler-for-the-beam-vm.html
https://thinkingelixir.com/podcast-episodes/017-jit-compiler-for-beam-with-lukas-larsson-and-john-hogberg/
Постестили перформанс на рэббите, там буст порядка 40%. В целом автор проекта говорит что на разных тестах разных приложений он получал буст от 30 до 135% по производительности.
Так что поздравляю всех эрлангистов, эликсирщиков и прочих пользователей BEAM.
Охуенно
Прикольно, что с JITом обычный jason стал уделывать jiffy, которая NIF на няшной. Завтра поставлю себе дев версию, надеюсь удастся повыбрасывать некоторые NIFы что мы на работке понаписали, заменив их обычным эрланг/эликсир кодом.
Согласен. Но интерес так-то не пропал.
проруби
Эликсир подходит для фуллстек разработки?
Фулстак только на js. Возможно еще Dart - но ты скорее всего будешь первым (в истории) фулстаком на нем.
clojure
Да, если выбираешь SSR.
Вообще, Phoenix LiveView это глоток свежего воздуха: считай, минус вся остоебавшая SPA-поебень и вообще минимум js-дрисни. Чисто кайф.
Норм, мой первый проект на эликсире был где-то в 2015 ember + phoenix, мне понравилось. В эмбере , насколько помню, много хорошего с json-api было связанно, в эликсире есть норм либа для его поддержки.
Помимо этого видел где-то еще пару проектов на связке феникс + эмбер, хотя сейчас такого меньше, сейчас в качестве протокола чаще берут GraphQL + Relay и на фронте реакт. Лично я последний раз рестовую апишку видел в 2017.
Ох и зажрались программисты
https://2ch.hk/po/res/42638471.html (М)
Или эрлангистов это не касается?
Это копия, сохраненная 26 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.