Наблюдая определённое число адептов этих замечательных языков, зачинаем второй официальный ОБЪЕДИНЁННЫЙ ЭРЛАНГО-ЭЛИКСИРОТРЕД!
Erlang - один из немногих функциональных языков, разработанный специально для применения в реальном мире. OTP - платформа, содержащая огромное количество библиотек для построения приложений на Erlang, рассматривают с языком как единое целое. Изначально ориентированный на высоконагруженные распределённые отказоустойчивые системы, тем не менее имеет более широкую сферу применения. Среди самых популярных приложений, написанных на Erlang стоит упомянуть RabbitMQ, Riak, CouchDB, Wings3D, сервер-сайд WhatsApp и Chef. Язык поддерживает все основные концепции функционального программирования, но при этом не перегружен академичностью, писать на нём легко и приятно. Кажущийся с первого взгляда перегруженным синтаксис очень быстро становится привычным и интуитивно понятным.
Elixir - язык созданный для виртуальной машины BEAM, соответственно имеет те же самые преимущества. При этом имеет более привычный синтаксис в духе Ruby/Python, а также унаследовал от Lisp-семейства мощную систему макросов.
Изучать, прогать на языке интересно, но когда хорошо придрочишься приходит суровое понимание Хуйня без задач Не скажу за whats app и прочие варгейминги, но многие знакомые ерлангисты рассказывали что и в других фирмах потихоньку мигрируют на друге экосистемы, обычно это jvm\scala. Скалка мертва только в фантазиях борщехлебов с pr. Так что вкатывальщикам, планирующим зашибать баблину потому что язык не дрочит каждый второй школьник как это сейчас с ява, питоном, js и которые надеятся стать таким типа нестандартным спецом язык не рекоммендую. Для фана и ментального онанизма мастхэв.
>>845533 Раз вы не на эликсир переходите, то видимо с самой платформой что-то не так. Чем устроила jvm и не устроила beam? Или вам очень статической типизации захотелось?
>>845559 Куда угодно. Язык-то объективно хуёвый, громоздкий и многословный как её отсталая старшая сестра. Олсо, жду уже полномасштабного её форса с дальнейшим вливанием зиллионов индусов в и без того блевотное скала-комьюнити с последующим скатыванием в русский джява мир.
>>845568 Ясное дело, что скалка не идеальна, однако совсем не ясно, куда может быть целесообразно валить. На жабу? Так "валить" не требуется, жвм есть жвм. Шарп? Те же яйца, вид сбоку. Традиционная динамикопараша? Кложурапораша? Хаскелль? Выигрыша перед скалкой как-то не видно.
На скалке много готовых решений для задач фирмы. Расскажи чем сам занимаешься? тут в pr эликсир и феникс форсят как хипстера-наследника RoRНадеюсь это был не ты
>>845553 Хз, хз мне скалка куда легче зашла, хотя с функциональщиной был знаком еще до нее
>>845579 >тут в pr эликсир и феникс форсят как хипстера-наследника RoR Нет, не он, это я. Но всё так и есть. Задачей Ruby/RoR было вернуть фан в программирование, Elixir/Phoenix - славные продолжатели этой традиции. Во-вторых, RoR в своё время был самой прогрессивной веб-бекенд технологией, сейчас эта эстафета перешла к Phoenix и никакие парашные Play 2 даже рядом не валялись.
>>845590 Правильный подход к флоу веб-бекенд приложения вообще, к работе с DB-сущностями, выдаче представления, работе с сокетами и очередями и много другое. Попробуй, базарю ещё захочешь.
>совершенно нинужных в 99 случаях из ста. А вот и нихуя. Нужно почти везде, где есть риалтайм.
>>845595 Слишком абстрактно звучит. Профиты интереснее выглядят, когда есть хоть какое-нибудь сравнение. В Koa, например, поток мне кажется идеальным: получаем запрос — передаем вниз по цепочке миддлевари — всплываем обратно по этой же цепочке — выдаем ответ. Как он выглядит в Фениксе?
>Нужно почти везде, где есть риалтайм. Согласен, нужно, где есть реалтайм. И ненужно для 99 веб-проектов из ста.
>>845596 Проход в одну сторону по конвейеру от фронтконтрллера до вью, так же через подключаемые на разных уровнях миддлвари (плаги). Плаги подключаются почти на любом уровне, от объявления пайплайна и декларации его использования в конкретном скоупе в роутере, до использования в любом модуле или даже отдельной функции. Это, плюс простота создания DSLей позволяет писать большую часть приложения вообще декларативно, сама логика есть только чуток в контроллерах и в командах.
>>845579 Мы на него с RoR как раз и мигрируем. Работаю в основном с беком, хотя иногда и с фронтом, в уже довольно большом стартапе связанном с займами.
>>845754 Ах да, когда выбирали на что мигрировать я был за скалу, но тим лид пропихнул эликсир. Поначалу было обидно, что такой-то шанс поднабраться опыта в скале упустил, но сейчас мне очень даже норм.
А давайте кто-нибудь на мои тупые вопросы ответит: - как создать race condition в эрланге? (я знаю что это можно сделать) - можно ли написать программу которая попадет в дедлок? - алсо, с чего можно начать если хочешь разобраться в моделях параллельных вычислений (акторы, пи-исчисление, cps и все такое). Знаний в CS на уровне первокура, если не меньше
>>845809 1. зачем? Обычно пытаются от них избавится. 2. программа в дедлок не попадет, можно заблочить (но это довольно сложно) пару процессов которые циклично будут ждать ответа друг от друга если ты лошпен не прописал таймауты и не юзаешь otp (otp прописывает 5 сек таймаут для всего по дефолту именно чтобы новички не стреляли себе в ногу) 3. пи исчисление и cps мне не знакомы, за акторы посмотри вот это https://www.youtube.com/watch?v=7erJ1DV_Tlo
>>845830 > зачем? Обычно пытаются от них избавится. Чтобы от них избавиться, надо знать где они могут возникнуть. Ладно, это я балды. Просто мысля на досуге, может возможно доказывать что в такой-то программе при таких-то условиях гарантированно не будет гонок/дедлоков. Ну типа как в coq'е иногда доказывают корректность для safety-critical софта. Жаль я в этом слабо пока шарю. За видео отдельное спасибо
>- как создать race condition в эрланге? (я знаю что это можно сделать)
Например, создать gen_server, который инкрементирует значение переменной в своем стейте по сообщению, которое посылает сам себе по таймеру, скажем, каждую миллисекунду. Так же он может вернуть значение этой переменной из стейта. И есть несколько процессов-воркеров из другого gen_server, поведение которых как-то зависит от читаемой переменной. Если при подразумевается, что они должны одновременно прочитать значение и это как-то повлияет на их поведение, то будет тебе типичное состояние гонки.
>>845603 Это есть везде. Даже в сраных сервлетах жабовских. Все аргументы какие-то детские и пустозвонкие. Ты можешь что-то конкретное привести? Потому что вот эта вот >простота создания DSLей лишь пук в лужу.
>>845603 >В Koa, например, поток мне кажется идеальным: получаем запрос — передаем вниз по цепочке миддлевари — всплываем обратно по этой же цепочке — выдаем ответ. Django и куча других фреймворков работает так уже довольно давно. Но только завезли ЖС-дебилам, сразу начинается ИДЕАЛЬНО, О БОЖЕ 10 ИЗ 10!
>>845916 Просто иди нахуй, даун. При желании ты мог бы сам за 15 минут всё нагуглить и посмотреть, но тебе похуй, тебе не интересно, ты просто хочешь устроить срач ни в чём не разбираясь, потому что ты предвзятый пидарас, который всё будет подводить под то, что ЭТА УЖЕ ЕСТЬ ВИЗДЕ, будь это хоть 100 раз не так.
Тебе сказали что отличие есть, сказали в каких именно местах. Дальше, если бы ты не был пидарасом, ты мог бы поставить эликсир и феникс за 2 минуты и ещё за 10 минут развернуть прилу и посмотреть что да как. Вместо этого ты начинаешь кукарекать что тебе не объяснили, всё слишком абстрактно, что вот в коа (как будто кто-то обязан знать очередной нодопердильный недофреймворк) всё идеально, сам при этом нихуя толком не объясняя НУ ТАМ МИДЛВАРИ ЕПТА ТУДЫ-СЮДЫ. Уже на этом моменте тебя следовало бы послать к хуям, но тебе всё же ответили на том же уровне как проходит реквест, что там однопроходной конвейер, тоже мидлвари + MVC, только за счёт фениксовой метамагии декларативно описывается на eDSLке. Ты, вместо того чтобы разобраться или хотя бы прочитать одну из сотен сравнительных статей, продолжаешь чирикать что всё это детсад и дайте конкретные примеры. Просто укатывайся обратно в свой жс-тред, анальный ты клован.
>>845987 А ну ты значит из тех которым из пустого в порожнее DSL-и из DSL-ей лепить в кайф? А тут еще шедулить шедулером DSL-и можно. И даже делать DSL шедулинга DSL-ей. Охуеть как. Люди там распределенные системы, субд, ОС пишут, программируют вещи в интернете и только руби-программисты декорируют декораторы и перекладывают с формы в базу и обратно (DSL-ями). А эликсир программисты к тому же и пошедулить DSL-ями могут. Системы автоматического управления автомобилем на эликсире не пишут, но если когда-нибудь будет предоставлен API для распределенного шедулинга, можно будет написать DSL для всего этого.
>>845991 Что ты хочешь от ребенка? Он еще плохо разбирается в програмной инженерии и не способен отличить яркие фантики от серьезных вещей (судя по тексту). Может, кроме эликсира и сравнить ему не с чем.
>>845994 >Koa, Node, JS >Он еще плохо разбирается в програмной инженерии и не способен отличить яркие фантики от серьезных вещей. Сходи зависимости проверь, вдруг нпм-плагин какой удалили.
Не понимаю откуда срач, а всех языках веб параша делается одинаково, будь то си или хаскель, просто на эликсире ее делать более приятно чем на эрланге (есть удобные структуры которые более компактны в коде и можно мапить всякие жисоны туда-сюда). Сам феникс весьма деревянный, экто странный. На рельсах ту же самую вебопарашу делать было много приятней. Единственный плюс эликсира в том, что под капотом эрланг с полным интеропом и это открывает перед разработчиком хуилион возможностей которых в других языках не будет никогда. Но нет блять мы будем сраться по поводу чем мидлвари коа отличаются от мидлварей феникса, пиздец, да ваще ничем не отличаются. То что должно быть важно, так это семантика джаваскрипта и семантика эрланга и что эта семантика позволяет сделать. Кто хочет писать магазины на ноде тот пусть и пишет, это его дело, что ему в этом треде делать?
Затянул эликсир. Но судя по эко-системе эрланга он уж слишком заточен под определенный круг задач, что в общем-то очень даже хорошо. Но минус в том, а что можно на нём эффективно мелкое писать для себя, пользуясь его преимуществами? Подкиньте идей пожалуйста.
эликсир скорее заточен именно на одну задачу, делать веб в эрланговских проектах, например такая офигенная фича эрланга как битсинтаксис не реализована в эликсире совсем, эликсир приманивает рэилс разработчиков своим феникс фреймворком. Но потом новички знакомятся с декларативной парадигмой и эрлангом и через пол годика мы получаем нового человека. Почитай programming erlang джо армстронга, learn you some erlang for great good или Erlang/OTP in action. А лучше их все, так как они рассматривают эрланг с разных точек зрения. Если будешь знать эрланг, то будешь знать и эликсир ибо это лишь чуток другой синтаксис и веб-тулинг. Что реализовывать в эрланге чтобы насладиться его возможностями - можешь попробовать сделать мессаджинг, стриминг, распределенную базу данных, какую-нибудь p2p сеть, какой-нибудь биддинг, сервер для ммо, tcp-text бейзед имеджборду лол или платформу по запуску вебприложений (типа хероку). Все это интересные задачи. Только не делай казино, делай полезные системы.
>>846571 >Только не делай казино, делай полезные системы. Казино делаю на работе, лол. А коллега посадил на эликсир, ознакомился совсем немного с эко-системой эрланга, очень впечатлен, правда после ооп головного мозга немного мозг восстанавливать надо чтобы программировать по-настоящему.
Распределенный чат хорошая идея для вката в erlang\otp или такого сейчас как говна и спмописных имиджборд? Еще как-то думал о самописной поисковой системе для всем известной социалочки. Такая задача хорошо ложиться на философию erlang\elixir?
>>846725 >Что такое биддинг? баннерные\рекламные сети, автоматизированные торги, хотя торги это уже ближе к трейдингу но они оба примерно одинаковые задачи решают, тут есть много маленьких асинхронных операций которые должны в софт-реалтайме отдавать ответы, эрланг для этого дизайнился.
>Казино делаю на работе, лол. Жизнь не такая долгая. Программисты получают хорошие деньги и мы можем выбирать, чем нам заниматься. В конце жизни мне лично будет приятно вспоминать о том, что я создал что-то полезное, а не что-то что паразитировало на чужих слабостях.
>>846749 >Тащем - то программисты занимаются автоматизацией и сокращением рабочих мест. Тащем-то программисты снижают порог вхождения во многие профессии, и таким образом занимаются созданием новых рабочих мест. Терпи.
>>846571 >заточен именно на одну задачу, делать веб Elixir умеет всё то же само, что Erlang.
>фича эрланга как битсинтаксис не реализована в эликсире совсем Щито? Полностью то же самое поддерживается, тот же паттерматчинг, сайзинг, маскирование, указанием типа. http://www.zohaib.me/binary-pattern-matching-in-elixir/
>приманивает рэилс разработчиков своим феникс фреймворком Он пытается приманивать вообще всю прогрессивную молодёжь, а вот Erlang - язык для усатых марсиан из 80х, потому то The Cool Kids Don't Use Erlang, и это заведёт его в могилу рано или поздно. Ещё забавно, что до феникса под BEAM вообще не было нормальных вебфреймворков, всякую сцанину типа чикагобос, зотоник и цмску N2O вообще считать не будем, настолько это всё прошлый век и говно деревянное.
Олсо, в качестве критики в сторону Erlang: полное отсутствие хоть какого-то полиморфизма (ad-hoc на арности и типах функций - хуита в стиле паскаля и этого явно мало). Ну и говняный parse_transform (который ещё и выпилили с 17 версии) вместо метапрограммирования, совсем недавно только запилили более менее мощные либы под него, но все они громоздкие, сложные и видно что прикручено сбоку. Elixir же частично решает первую проблему, вводя кложуровские протоколы, и вторую, вводя нативное метапрограммирование, с квазицитированием, антицитированием и т.д. Ещё можно сказать про неймспейсы, нормальные способа импорта, которых в Erlang не было, и которые появились в лишь Elixir. Ну и прочие чисто инрфструктурные штуки, типа адекватного пакетного менеджера (rebar перестал быть говном только с 3 версии, да и в отличие от mix не имеет подключаемых к нему плагинов) и нормальная система кофигурирования. Так же появились стримы (в Erlang никакой эмуляции ленивости вообще никогда не было) и удобные конкурентные абстракции (как блять имея в Erlang такую пиздатую элементную базу не запили даже сраный async/await я не понимаю).
Короче, Elixir это именно капитальная модернизация Erlang и перевод его в это тысячелетие, а не просто какой-то там вебтулинг.
>как блять имея в Erlang такую пиздатую элементную базу не запили даже сраный async/await я не понимаю Поясни, зачем оно нужно если есть spawn/receive? Это же другая модель конкуррентности, нет?
>>846979 В Elixir тоже есть spawn/receive, просто spawn/receive - это низкоуровневая конкурентная штука. Часто в Erlang поверх него приходится лепить свои абстракции, заворачивать в функции, реализовывать свои протоколы. Elixir вводит две конкурентные абстракции Task и Agent, которые хорошо подходят для общих случаев.
>>846970 Каюсь! Не видел битсинтаксиса ни разу в эликсире ваще нигде и думал что его нету. Наверное мое отношение предвзято, потому что в эликсире x = x + 1 валидное выражение и поэтому у меня от него перманентный батхерт, хотя и им сейчас и зарабатываю на жизнь. Но как-то протоколы мне никогда и не были нужны, синтаксис эликсира считаю уебищным хоть я и рубиеб в прошлом. hex и mix рили за что эликсир стоит уважать, они ахуенно повлияли на сам эрланг. Это хороший пример как надо рулиться и сейчас ребар3 будет включен в otp в 20-м мажорном релизе. Ленивость можно сделать самому в пару простых функций в исключительных случаях когда она нужна. парстрансформы говно, да, но и за quote unquote в продакшен коде тебя выебут, годится только чтобы делать дсли для библиотек. Таски и агенты удобны чтобы что-то быстро наваять но при первых же изменениях требований всеравно переписываются на генсерверы. Асинк и авейт можно написать самому в пару строчек. В общем наверное я усатый марсианин из 80, только родился в в девяностых. Согласен что некоторые вещи в эликсире сделаны приятно, веб-тулинг например лол. Но x = x + 1 это пиздец имхо. Главная претензия у меня к эликсиру в том, что все эти рюшечки погремушечки и обвесы мешают мыслить декларативно и асинхронно, я понимаю что это звучит очень субъективно. Но блять x = x + 1. Что ты можешь сказать по этому поводу? Реально надо идти на поводу у крутых детей чтобы такое завозить в язык?
>>847093 x = x+ 1 это маразм конечно главное что не нужно, в основном я догадываюсь макаки будут пользовать когда не смогут название новой переменной придумать т. вкатывальщик-скриптомакак
Приветствую, браться. Я руби-миддл, по совместительству ОП руби-треда. На руби пишу в основном функциональный код с иммутабельными структурами данных, так что Эликсир мне весьма по душе. Кстати, уже сейчас работу на Phoenix можно найти на https://rubyjobs.ru
>>847213 Начитались статей от западных "математиков". У нас в школе информатика была с 10го класса только, и когда нам объясняли x=x+1, никто не удивлялся и не заявлял и "нематематичности". А вот один американский дурачок удивлялся, потом написал об этом статью, и теперь макаки ему подражают, чтобы казаться умнее.
Еще всегда проигрываю со статей о том что 90% программистов не понимают сути указателей и поэтому в принципе не могут в сишку. Почему-то в моем окружении 100% понимают концепцию, даже ваниль-тян в розовых стрингах.
>>847213>>847251 Ребайндятся переменные. Да, я отличаю single assignment и immutability, и понимаю что в эликсире убрали только первое, и да это мне не нравится. За sml не скажу, но в Caml есть мутабельность, о которой чаще всего надо специально просить (let mut var = 4). То есть ты явно пишешь что переменная writable. Но Caml собственно для других задач делался, по производительности он кстати делает многие языки и даже может использоваться как числодробилка, но при этом ЕМНИП до сих пор не может в concurrency нормально. Я кодил на питоне, жс, немного перл видел. Все императивные. За пистон скажу что в общем-то всегда, абсолютно без исключений когда видел повторный байндинг переменной вида x=f(x) вне лупа, он был там нах не нужен, ни для читаемости ни для чего-то еще. Ты просто увеличиваешь количество потенциальных ошибок. При том что фп там вообще перпендикулярно.
Понимаю, что экосистема Эрланга - одна из самых уебищных в индустрии (даже в Питоне лучше). Что синтаксис неприятен императивным дебилам. Что толковых фреймворков для веба нет (N2O-баттхерты в студию).
Вопрос: зачем нужен Эликсир? Почему бы не попытаться решить проблемы существующей технологии, не плодя N+1 стандарт? Фред Хеберт вот пилит rebar3, можно помочь ему. OTP-команда наконец-то перевернула календарь и смогла в нормальные багтрекинги, релизы и проч.
>>847093 > Но блять x = x + 1. Что ты можешь сказать по этому поводу? Иммутабельность означает что твои data structures не меняются. Локальный ребиндинг сам по себе не является чем-то плохим, и я понимаю в чём поинт Хосе, который он озвучил ещё в Programming Elixir. Если структуры не меняются ни локально, ни из другой точки программы, ни из другого треда - то переменные никакие не переменные, а просто лейблы, и от их реюза ничего не меняется. Баттхёртят от этого только клоузмайнды под эффектом утёнка, что ой блять как они посмели - убили нашу священную корову.
Касательно остальных аргументов НИНУЖНО и МОЖНАСДЕЛАТЬ - ну так тебе не нужно, а кому-то как раз не хватало. Удобство феникса обусловлено как раз метапрограммированием, ты можешь сам его не использовать, но используя феникс - ты уже пользуешься тем, что было сделано с его помощью. Подключая какой-нибудь JaSerializer, который позволяет описывать JSON-API вьюхи вообще декларативно, как модели - ты пользуешься тем, что кто-то запилил либу с едслькой. В Erlang этого не было, и например, авторы mochiweb пердолились с parse_transform, а могли бы сразу юзать нормальные средства, если бы они были. То же самое с протоколами, я вообще не понимаю как они могут быть нинужны, если до них не было нормальных средств делать обобщённые функции над разными типами коллекций и структурами. Всё что в Erlang было, это сраный behaviour и extends (который к счастью выпилили в 17). Наличие Enum это просто охуенно и это обязано именно протоколам. Возможность к той же Ecto Model (да и прочим высокоуровневым структурам) применять функции из стандартных протоколов - повышает органичность, чистоту и понятность кода при работе с ним.
>Не видел битсинтаксиса ни разу в эликсире ваще нигде и думал что его нету Это, возможно, потому что в Elixir в отличие от Erlang'а есть нормальные строки, а не отмазки, что список циферок это строка. Поэтому в Erlang как правило ложат хуй на стринги и данные от инпута до аутпута протекают в бинарном виде. Это конечно норм, если у тебя там какая-то низкоуровневая штука, вроде пересылки бинарных пакетов туды-сюды по олдовому протоколу. Но когда работаешь с более высокоуровневой областью (да тот же уеб), то нужны именно строки. Поэтому в Elixir I/O тоже в бинари, но вот во всяких либах/фреймворках - опционально, и народ выбирает строки, потому что в отличие от Erlang боятся нечего и строка это просто строка.
>>847278 Может плохая аналогия, но в мире жс появился коффескрипт (тоже рубисты сделали). Потом вышла новая версия ES, и некоторые фичи из коффескрипта засунули в жс (сам коффескрипт сейчас уже малопопулярен, но это другая тема). То же со скалой и жавой. Т.е. это необязтельно плохо.
Смысл персистентных структур в том, что все их версии не уничтожаются до выхода из скоупа. Ребиндинг же уничтожает старую версию, заменяя новой. Десктруктивный апдейт, другими словами. Если он локальный и не содержит сайд-эффектов, то в принципе, вроде даже референс трансперти не нарушается, но если есть работа с World, то тут нужны мандады или линейные типы, чтобы проконтролировать что никто не обосрался. Но так как в Erlang/Elixir все изначально ложили хуй на тайп-сейфети, то всё похуй.
>>847289 Очередной питушок из пидорахинского унивирситета, которому с детства отождествили понятия программирования и математики, что по факту пережиток далёкого прошлого, как и местная система образования с царицей наук во главе.
>>847296 >Ребиндинг же уничтожает старую версию, заменяя новой Если старая версия используется, то она продолжает использоваться после ребиндинга, если нет то невозбранно уничтожается сборщиком, все логично.
Эти плебеи, даже не слышавшие про изоморфизм Карри-Говарда ещё и имеют наглость хамить. Представляю, какого будет их удивление, когда через несколько лет программирование наконец будет сведено математике и станет предметом нормальных людей, а не специально выведенных компьютерных аутистов с их мерзкими указателями и архаичным байтомирком. Даже не знаю что им придётся предпринять, устроиться в ближайшую закусочную официантом или же сразу наложить на себя свои грязные мазутные ручонки.
http://blog.plataformatec.com.br/2016/01/comparing-elixir-and-erlang-variables/ Ну вот собсна адекватный пост на тему от эликсироадепта. Я конечно несогласен вообще ни разу, но свой пойнт он объясняет. Ребятам хочется так. x = chlen x = f(x) x = g(x) x = h(x) Но эти проблемы прекрасно решаются компоновкой функций. Пока писал еще параллельно функцию пайп написал. W = pipe(x, [f, g, h]). Делает то же самое абсолютно, простой фолд. ЕМНИП, сам факт того что эликсирщики добавили в язык иероглиф ^ который гвоздями прибивает переменную, характеризует.
>>847304 Как она может продолжать использоваться? Её потёрли. Персистентные структуры, это когда ты такой A = something:new(), B = something:do_something(A), C = something:do_something_else(B)
и у тебя есть все версии структуры, самая первая связана с A, связана с B, третья с C и они будут уничтожены только тогда, когда ты выйдешь из скоупа. С ребиндингом же: a = Something.new() a = Something.do_something(a) %хуяк тут проебали старую версию структуры, потому что a теперь связана с её новой версией, а со старой уже ничего не связано, но при этом ты ещё не вышел из скоупа b = Something.do_something_else(a)
персистентность тащем-то не означает, что прям нужно хранить все состояния. Достаточно иметь контрольную точку и команду изменяющую состояние. Тогда полностью персистентная структура сводится к дереву команд применяемых к начальному состоянию.
>>847313 >хуяк тут проебали старую версию структуры, потому что a теперь связана с её новой версией, а со старой уже ничего не связано, но при этом ты ещё не вышел из скоупа И что в этом плохого? Пусть память жрёт, что ли? a = Something.new() a = Something.do_something(a) b = a a = Something.do_something_else(a) И пользуйся старым a через b, если тебе это надо. На тебе аналогичную претензию: a = f (2 + 2) %хуяк, тут проебали результат выражения 2 + 2, но при этом ты ещё не вышел из скоупа b = do_something(a);
>>847326 > Пусть память жрёт, что ли? Вот вообще ни разу не аргумент. Когда есть single assignment, о корректности программы проще рассуждать. Плохо когда в один момент вычислений Х=2, в другой Х=4. Я хочу знать что где бы в рамках одного скоупа я ни увидел Х, это именно тот же самый Х. И еще раз, функции прекрасно пайпаются и компонуются, и получается читаемо даже с синтаксисом эрланга. Тебе не нужно байндить переменную больше одного раза, просто собери все функции в одну. Или в несколько функций, если хочешь сохранять промежуточные результаты.
>>847280 >Локальный ребиндинг сам по себе не является чем-то плохим Но зачем? Я, как и пара анонов сверху поддерживаю идею что надо делать композицию функций и преобразовывать структуру данных декларативно, а не дробить все на какие-то блядские шажочки и биндить все к одной переменной как какой-то императивный дебил, конечно в эликсире нету всяких точек и долларов как в хацкеле, но есть |>, так зачем надо перебиндивать переменные, какую проблему это решает когда в исходном эрланге уже был сингл асайнмент. Какую проблему этим самым решили? Да, убили мою священную корову и я не понимаю зачем это было делать.
>>847307 Вообще то не примазывайся, сейчас макают псевдо-функциональщиков, подорвавшихся на x = x + 1. До байтоёбов очередь еще не дошла. Так что не надо тут стрелочки переводить, в очередь на порку.
>>847385 Пнятненько, ожидал какую-то нормальную дискуссию на дваче, был дураком. Исправлюсь. В общем всех эликсирщиков прошу простить меня, я зря поебывал им голову со своей декларативностью, кому это надо когда есть новые быстрые рельсы. В любом случае эликсир это позитивное явление, я его всячески поддерживаю.
>>847350 >и я не понимаю зачем это было делать А почему это не делать? Убрали ненужное ограничение, которое ничего не меняет.
>что надо делать композицию функций и преобразовывать структуру данных декларативно Ну понимаешь, имея лишь голый |> без функторов/монад ты не можешь делать чейнинг всего. Там где значение подходящие - можешь, но там есть сайд-эффекты или где нужно что-то из чего-то распаковывать - нет. Допустим у тебя есть функция a которая возвращает эрланговский вариант Maybe, то есть {ok, Result} | {error, Reason}, где Result - скажем список. А вторая функция b принимает список. Ты уже не можешь их счейнить. Были бы функторы/монады, всё в инстансе было бы определено, а так - придётся пошагово ручками распаковывать. Да и вообще есть много мест где нужно именно выстраивать порядок вычисления, и в том же Haskell зделоли do-нотацию для эмуляции императивности, чтобы не пердолится с лямбдами и их склейкой, да и просто есть let и where чтоб не подставлять всё в огромную лямбду, тут даже не в порядке вычисления дело, а в удобстве и понятности записи.
>>847401 это понятно что чейнинг всего пайплайн оператором сделать нельзя и что последовательные конструкции обязательно нужны. Но ребиндинг я считаю ведет в ад, имхо это ненужная и непонятно чем мотивированная штука. Сингл асайнмент это не просто ненужное ограничение, это то как ты мыслишь о своей программе. Ты привязываешь терм к переменной и строишь следующие термы основываясь на существующих термах. Пускай ты и не применяешь точки с долларами и не вяжешь все в лямбды, но ты явно видишь как данные преобразовываются в процессе. Когда ты видишь что у тебя произошла ошибка при обработке терма привязанного к переменной X1 ты можешь легко найти где этот терм был привязан ты явно видишь все этапы которые проходят с структурой данных, явно видишь как из терма X выходит терм X2. По итогу я так и не понял чем ребиндинг мотивирован, разве что X0 X X1 X2 выглядят не очень красиво, неужели это и есть причина?
>>847401 > ты не можешь делать чейнинг всего Зачем тебе в цепочке больше 1 функции с сайд-эффетом? Можешь пример привести? > Допустим у тебя есть функция a которая возвращает эрланговский вариант Maybe, то есть {ok, Result} | {error, Reason}, где Result - скажем список. А вторая функция b принимает список. Мы говорим про язык с исключениями, я не стану просто делать {ok, Result}. Если что будет рантайм ошибка при чейнинге, возможно предусмотренная и пойманная (есть try/catch). А если не предусмотренная то пускай крашится.
>>847466 А если без траллинга, чего плохого в хаскеле? Я руками не трогал, но видится пока один недостаток -- слишком много способов сделать одно и тоже.
>>847476 Ничего в нем плохого нету. Прекрасный язык. просто есть много долбоебов которые зазря выебываются и зарабатывают языку хуевую репутацию у джавистов. Хаскель изучается за пару недель под пивко и несет в себе многие реально крутые концепции. Я бы советовал всем попробовать пописать на хаскеле.
>>847476 >слишком много способов сделать одно и тоже Это скорее плюс. Это значит, что сам язык очень простой и элегантный, а все эти заигрывания с императивным программированием - просто синтаксический сахар к уже привычным лямбдам.
>>846970 >Олсо, в качестве критики в сторону Erlang: полное отсутствие хоть какого-то полиморфизма (ad-hoc на арности и типах функций - хуита в стиле паскаля и этого явно мало)
>>847256 >А ну покажи. Мониторить надо. Не знаю, может это и не оптимальный путь поиска вакансий. Но это первое место, из тех что я мониторю, где они начали появляться. На апворке, кстати, как с этим дела?
Люди поясните очень подробно за это? x = x + 1 Зачем оно надо? Не нарушает ли это идеологию самого инструмента? И есть ли всё-таки переменные в эликсире?
>>850347 >Зачем оно надо? Локальные деструктивные апдейты. Т.е. реюз уже объявленных лейблов. >Не нарушает ли это идеологию самого инструмента? Нет. >И есть ли всё-таки переменные в эликсире? Нет, это просто переписываемые лейблы.
>>853979 >про ужасный деревянный тулинг у Erlang Да было дело с билдингом аппов и релизов, но уже в прошлом. Теперь есть rabar3, в который, вроде, даже relx вшили, так что кроме него тебе вряд ли что-то ещё понадобится. Ну может ещё relflow от RJ'ея для упрощённого менеджмента аппапов https://github.com/RJ/relflow
>>853979 есть такая проблема, ее все видят, она актуальна, ее решают, как отписал анон сверху rebar3 решает почти все проблемы, но там где не решает тебе помогут в мейлинг листе или в irc
>>854417 Да, прошлый век. Встречаются только в старых проектах, написанных когда ребар ещё не был распространён. Или в проектах, где NIF'ы или ещё какая нативщина собирается.
>>862811 это ребар проекты, читай документацию к rebar. Гугли как компилировать и загружать erlang код. Забавно, знакомится с эрлангом из блога Максимушки, не думаю что это круто, так может сработать защитный рефлекс. Почитай первые пару глав из Programing Erlang где рассказывают про шелл и как загружать код с основными конструкциями языка.
>>845348 (OP) Аноны, какая сейчас ситуация на рынке с эрлангом? Например если я хочу вкатиться и найти работу с эрлангом/эликсиром, но опыта у меня нет и диплома специализированного тоже нет. Смотрят ли вообще на диплом или не важно? Если я приду устраиваться с дипломом спортфака не обсмеют ли?
>>862872 В целом диплом не так важен, но без опыта твои шансы стремятся к нулю. Все всё понимают, поэтому экспертного знания Erlang/Elixir требовать вряд ли будут, но пару лет опыта Джавы/Крестов/Питона иметь нужно. Учитывая ~5 вакансий на весь ДС, шансы у тебя очень хуёвые.
>>862872 есть вакансии, но их мало. Не знаю как дела в ДС, я из Минска. У нас тут только гдето в 2-3х местах пишут на эрланге и они не хайрят. Я сам работаю удаленно. Нужно чтобы у тебя было годика 2-3 успешной разработки бекенда на других технологиях. Хороший английский и 2-3 книги об эрланге за плечами, что-то сделанное на гитхабе на эрланге и понимание акторной модели, лет ит краш. То есть реально hard way, но оно того стоит. поверь мне, это стоило того чтобы хлебать борщи и уходить с насиженных мест.
>>862917 Анон, будь добр ответить на несколько вопросов, раз уж ты пишешь на Эрланге. 1) Какой фреймворк/сервер/набор библиотек используете? 2) Приходиться ли писать NIFы? 3) Какие вообще языки нужны на работе, помимо Erlang?
Сам я пишу асинхронщину на Питоне, работу менять не собираюсь, ибо у меня и тут всё довольно интересно в плане задач и технологий. Через год, может, покатаюсь по собеседованиям на Эрланг/Эликсир ради интереса. И я другой анон, если что.
>>862917 > Хороший английский Есть. Читаю документацию и книги на нем без проблем, могу говорить и слушать >2-3 книги об эрланге за плечами Тоже есть, даже больше. >что-то сделанное на гитхабе на эрланге Делаю как раз проект на Фениксе тот самый кун с дипломом спортфака
>>862951 Сейчас пишу на эликсире самую обыкновенную бизнесс логику лол, ту же, что писал и на других технологиях. Но в функциональном языке все это делать много интересней и многие вещи много гибче, с теми же объектами в функциональном языке ты рулишься, но мыслишь немного под другим углом и можно и нужно использовать в некоторых местах объектный подход в котором у тебя вместо объекта рекорд который обслуживают чистые функции из одноименного модуля. Просто надо немного мыслить под другим углом, это очень круто так как каждый день на работе что-то новое открываешь и код написанный месяц назад уже знаешь как улучшить, я сейчас можно сказать эрлангист джуниор. Работу искал лениво пару месяцев, работая на прошлой. Потом меня все заебало, я решил, что я делаю сейчас полную хуйню и от меня требуется именно такая хуйня и весь энвайронмент способствует только написанию хуйни и созданию илюзии продуктивности. И я не могу больше сидеть в этом болоте, быть тупым выебщиком, решил твердо что буду писать теперь на эрланге(или эликсире, я делал упор именно на эрланг и читал книги по эрлангу и перся именно по нему, но эликсир и эрланг в принципе одна хуйня, кроме некоторых как приятных так и неприятных моментов, я тот долбоеб сверху который залечивал за декларативность и то что я за сингл асайнмент топлю) и сыбал с работы в пустоту, дальше нашел работу через 3 месяца, сбережения позволяли в принципе год не работать и я параллельно иногда ходил на собесы на маминых сеньеров и тимлидов по старым технологиям и только больше утверждался в том что мне с этими чуваками не место и что я лучше буду джуниором эрлангистом чем тупым сеньером с выслугой в команде где вообще никто нихуя не знает что они делают. за все это время прошел около 3-х технических собесов, все удаленные. Везде меня какой-нибудь прикольный чувак долго распрашивал про OTP, асинхронность, платиновые вопросы про переполнение мейлбокса, как смоделировать в акторах решение какой-нибудь проблемы и всегда как-нибудь унижал, но все после собеса дружественно советовали что подучить и были в целом рады что кто-то стремится изучить эрланг. Было не просто нихуя, но сейчас я очень доволен тем чем я занимаюсь и то что за мной присматривает чувак с 10 годами опыта разработки, 5 из которых на эрланге. Учишься очень быстро и опытный человек может донести до тебя, как правильно надо мыслить в пару предложений. Удачи, мне помогло то что я полностью комитнул что теперь буду писать только на эрланге и мне похуй на всех этих эйчаров и рекрутеров которые меня баксом заманивают писать херню, хотя в некоторых местах было реально тяжко, вроде и знаешь что там говнокод и команда даунов, но предлагают оче дохуя, но сейчас не жалею ни о чем, напротив как будто всю эту тему заново переживаю.
>>862951 забыл на вопросы ответить лол >>863193 1. Феникс, экто, таймекс, поизон, это то что я юзаю 2. Не приходилось 3. Мне никакие, я пишу чисто на эликсире и возможно когда-нибудь меня пустят в хардкорную часть проекта написанную на эрланге, но наверное нет лол. Но знаю еще хаскел и кложу, изучал просто чтобы прошарить функциональную парадигму поглубже.
Вообще есть типа платиновый джентельменский набор из ковбоя, рэнча, пулбоя, какой-нибудь amq, xmpp, ребар. Но это специфично для проекта. Про это будет в описании вакансии, но я изучал все это просто чтобы повысить свои шансы на найм
1) Никаких фреймворков, ребар для построения и компиляции, используем и cowboy и misultin, последний только для вебсокета. 2) Крайне редко, в основном в случаях, где сильно нужна производительность и никаких других вариантов не осталось. Писать нифы это охуенная ебля в жопу, без лишней надобности связываться не стоит. 3) Зависит от работы, очевидно, но точно надо уметь в какую-нибудь скриптопарашу (хотя бы баш).
Здраститя, это опять я выхожу на связь и опять по поводу максимкиного прувера. Поставил бубунту, поставил эрланг, сконпелял ребар. Что делать дальше, как поставить >>862811 это?
>>866844 Зря ты на Максимку гонишь, оно реально конпеляется и даже работает. Там, правда, ошибка странная вылезает, но м.б. это я какую-то хуйню сделал. Да, если кроме меня это кому-то интересно, весь процесс установки: erlang: sudo apt-get update sudo apt-get install erlang
rebar: git clone git://github.com/rebar/rebar.git cd rebar ./bootstrap
inotify: sudo apt-get install inotify-tools
om: git clone git://github.com/groupoid/om && cd om make ./mad sh
exe: git clone git://github.com/groupoid/exe && cd exe make ./mad sh
>>867184 А если я хочу именно пдф, да еще и со всякими советами от бывалого (тм), обсуждением спорных решений и всем таким прочим? Публицистичское повествование хочу, а не сухие доки. Мне нравится, как Армстронг пишет и говорит. Или в той книжке слишком много воды для меня будет?
>>870056 >призывает всех россиян и украинцев войти в айти Вот это пидор, блеать! Ишь, чего захотел! Из нас индусов сделать надумал? Да ему надо в жопу паяльник раскалённый поглубже засунуть за его галерную пропаганду!
asp.net, j2ee, php, руби в конце-концов. Только не Эрланг, нахуя он там? Не, ну с вебсокетами еще можно попердолиться, но... Есть же сециально заточеные под веб платформы.
>>872686 Для чего тогда ты используешь эрланг? Хочу замутить веб приложение чтобы прочувствовать эрланг, но с другой стороны не хочеться садиться на точеный стул, а взять какую-нибудь ебу, которую активнее используют в продакшне
>>872775 Планирую сначала писать как диды, на эрланге, а уже потом перекатываться на эликсир А что на джавалиспе можно писать что-то серьезное? я думал чисто игрушечный язык, для скобкоебов
>>872847 >Хочу замутить веб приложение чтобы прочувствовать эрланг, но с другой стороны не хочеться садиться на точеный стул, а взять какую-нибудь ебу, которую активнее используют в продакшне У меня такая же болезнь, двачую вопрос этого господина
>>872847 > А что на джавалиспе можно писать что-то серьезное? я думал чисто игрушечный язык, для скобкоебов Фронтенд более чем (имхо это даже единственный способ писать фронт, ибо js/elm/pure/прочее - говно). А вот бэк хз, ничего интересного для бэкэнда я там не нашел, разве что можно использовать edn вместо json как формат между бэком и фронтом).
>>872847 Про фронтенд уже сказали, сейчас это самая крутая штука для фронтенда ВООБЩЕ. Бэк - ну, среди эрлангеров проводили опрос, типа какой бы язык вы использовали вместо эрланга. Самым популярным вариантом была кложа, потом скала с акторами.
Пзц, подробнее ознакомился с вашим лиспом и возникло желание попробовать написать фронт на нем. Таким и темпами я так и останусь до старости мамкины борщи хлебать
>>873083 Чому борщи? Ты ж вместе с этим будешь осваивать реакты-хуякты и правильную архитектуру клиентсайда, вполне потом можешь взять и на жс-миддла пойти.
>>873184 Да, всё это борщехлёбство в той или иной степени, так что всё это мы пишем для себя в стол и унылый гитхаб, только особо упорные и удачливые проталкивают в прод.
>>873202 Ну, не скажи. На самом деле это проще, чем кажется. То есть упорные и удачливые, да, но удача тут сочтоит только в адекватной команде и подходящем проекте.
Ну и опять же, если дрочишь кложурсчкрипт, то прокачивается навык клиентсайда вообще, так что профит в любом случае. Если дрочишь ерланг, прокачивается навык дистрибьютед-хуютед и всего такого. Опять профит. Так что все не так плохо.
Двачаны, а в эрлане вся эта типизация активно используется? Вроде годнота, не качкель конеш, но на уровне. При желании можно такую себе статику динамировать.
Ну по логике если это такой охуенный фреймворк то должны появляться крутые проекты, которые теперь под силу написать без батальона манкискриптеров, но что-то я такого и близко не наблюдаю. С руби например был твитер, гитхаб и тысячи других. Я бы и рад погрузиться, но если такие хвалебные оды поют прогеры, открывшие для себя другие акценты в вычислительной модели или беам то нахуй надо. Есть ли в треде критически настроенный анон, который обмазался фениксом и по-хардкору, без сектанства пояснит за все плюсы и минусы?
заебали, что за додики на зекаче пошли >>876960 кому ты нахуй нужен, убеждать тебя что оно тебе нужно если бы хотел попробовать - давно бы уже всё поставил и проверил, подходит тебе оно или нет, а ты ломаешься как барышня, ждёшь чтоб тебя накормили советами мудрыми короче, так и быть, поясняю - эликсир/феникс - нинужон, нет там ничего интересного, это всё хипсторы тупые, задач тоже нет, проходи мимо, если кто-то утверждает обратное - это фанбой, его не слушай
>>876989 >кому ты нахуй нужен >ломаешься как барышня Хуя тебя рвануло. Дедлайн проебал? Никто не ломается, только времени не анлим и когда оно будет, тогда и попробую. А возможно и нет, если окажется что есть куча минусов, о которых фанбои и создатели фреймворка часто умалчивают и все "мелочи" вылазят когда ты уже закоммитил кучу времени впустую.
>>877006 если времени нету, то откуда у тебя возьмется время на изучение эрланга? Книжки надо читать, просто так взять и начать быдлить как на ноде и руби не получится.
Я тут угорел по метапрограммированию. Расширил немного ecto своими макро которые экспандятся в макро экто, которые экспандятся в эликсир, которые экспандятся в эрланг. Зависимость есть, начал к эликсиру теперь лучше относится, система макросов крутая. Читал сразу цикл этих статей http://theerlangelist.com/article/macros_1 потом Metaprogramming Elixir Ну еще вот это было полезно чтобы понять чем postwalk отличается от prewalk https://en.wikipedia.org/wiki/Tree_traversal
>>879658 она же не дорогая. Но в принципе и знаний там сильно крутых сакральных нету. Если бы я знал как вытереть аннотации что книга подготовлена для меня то скинул бы последнюю.
>>880143 Любая асинхронная поебота. Можешь написать банковский аккаунтинг с всякими крутыми транзакциями чтобы много подключений тянуло без потерь бабла и написать нагрузочные тесты для этой штуки, собирать проценты с транзакций на отдельный счет и расчитывать опердени для сбора годовых со счета. Вроде прикольная задачка на пару вечеров но прикольно будет смотреться в гитхабе. Я когда искал работу делал стриминговый сервер, как у джо армстронга, только OTP совместимы на рэнче с выводом текущих треков и списком подключений через ковбойский rest. Еще у меня была идея запилить анонимный мессаджинг полностью без хранилища, даже без очередей и шифровать трафик своими сертификатами или пользовательскими ключами. Вроде тоже на пару вечеров. Можно сделать что-нибудь прикольное с сбором данных из многих источников. Хоть банального поискового паука запилить который будет в тыщу потоков сканить даркнет. В общем все где надо много потоков будет прикольно делать на эрланге\эликсире и обычно не долго, если тебе не надо сотня формочек или сотня интеграций с другими сервисами, это очень много времени занимает и в резюме кисло смотрится и ваще не очень понятно, зачем это писать на эрланге
>>880150 Я думаю лучше всего почитать книги по эрлангу в первую очередь. Programming Erlang 2nd edition, Erlang and OTP in Action эти книги нацелены на то чтобы именно в прикладном стиле тебе объяснить как что делать и почему в эрланге сделанно именно так, а не по другому. В общем просто мастхев. А если погружаться в теорию то в первую очередь надо выкупить акторную модель, но ты ее в принципе и так выкупишь когда книжки прочитаешь. https://www.youtube.com/watch?v=7erJ1DV_Tlo
И еще есть крутая книга, я сам ее не читал, она у меня следующая к прочтению. Выглядит более чем сочно и алгебраично. Некоторыми продвинутыми эрланг пацанами считается чем-то вроде библии :) http://usingcsp.com/cspbook.pdf
Ну и очень поможет смотреть выступления пацанов с Erlang Factory и Erlang User Conference. https://www.youtube.com/user/ErlangSolutions Особенно те, где чуваки рассказывают про свои проекты, хорошим тоном считается не просто рассказать как мы тут все пиздато сделали, покупайте наш продукт а именно про то как чуваки преодолевали сложности, они там на каждом проекте уникальные у челов.
>>880187 >А остальные разработаны для применения в мире единорогов? Что за поебень! Хуево написано, имелось в виду что он дизайнился для решения конкретных проблем, а именно, написания динамических асинхронных опердений без обязательного приседания со штангой
>>880191 Спасибо, что за меня ответил. Пальцем не будем показывать, но есть языки, которые очень долго выходят, если вообще это делают, из своих альма-матер и даже потом споры, зачем они нужны, не утихают. Здесь же изначальная ориентация на решение определённых задач + батарейки в виде OTP/Mnesia/etc.
>>880333 >Ну, мне потребуются достаточно хардкорные реал-тайм вычисления и обмен данными между процессами
Если тебе там потребуются реально хардкорные еще и реалтайм вычисления то эрланг может там всосать, он не самый быстрый парень на деревне. Ты не смотрел на другие технологии. На эрланге вычисления будут надежными распределенными, но не быстрыми. Для того чтобы их сделать быстрыми надо сделать дофига финтов ушами. В общем я предупредил. Лучше подумай хорошенько подходит ли он под твою задачу
>>880343 А что у нас есть функциональное и более быстрое? Я на си не хочу писать, нахуй нахуй Не то что бы там было что то совсем хардкорное, но непрерывно ведущееся преобразование фурье - как ? Достаточно хардкорно? И/или генерация звука, например в принципе сосущие части можно и на си написать же, насколько я понимаю - механизм интеграции есть
>>880348 Преобразование фурье и генерацию звука должен вытянуть. Попробуй сразу запилить эти штуки и сделать бенчмарки. Механизм есть, но там тысяча подводных камней. Если тебе надо 1 процесс который будет что-то генерировать и это надо будет потом распылять на много потоков то напишешь линкованный процесс средней кровью, если тебе таких процессов надо много то появится боль и кровь будет большая. OCaml посмотри наверное, я на нем не писал но вроде как он хорошо подходит именно для десктопных шустрых прилаг, свяжешь ее потом по сокету с своим эрланг сервером
>>880348 >в принципе сосущие части можно и на си написать же, насколько я понимаю - механизм интеграции есть
Если там нет чего-то, для чего НУ ВООБЩЕ ПИЗДЕЦ КАК нужна скорость, то сосущие части проще и быстрее будет написать на джаве (в математике она будет куда быстрее эрланга), джава с эрлангом интегрирована хорошо.
>>880456 >>880664 Джава то интегрирована хорошо, но мне лично например бы совесть не позволила писать на джаве или плюсах, у меня это 2 самых нелюбимых ЯП, я бы все-таки постарался либо написать на языках которые заточены под десктоп или же попердолился немного с pure c. Но я диванный инженер-системотехник которого в универе целый год когда-то ебали сишечкой, так что может это для меня сишечка так проста и няшна. Но это все вкусовщина. Одно я знаю точно, эрланг врядли себя проявит как хорошее решение для десктопного приложения. Хотя чем черт не шутит.
>>880674 >>880664 НО на плюсах есть много готовых библиотек для работы с сигналами, я когда-то интересовался как сделать свой vst синтезатор и эффекты и C++ там дефолтное решение. Но и на pure C там много готового и няшного.
>>880675 Нихуя там нет няшного, сишка очень лоулевельный язык и мысль там теряется среди кучи деталей типа ручного копирования буферов. Эрланг - ну это вообще клиника. Тебе бы подошел haskell c vector fusion, на нем будет быстро и довольно высокоуровнево, но ровно до тех пор, пока тебе не потребуется запилить какой-то сложный алгоритм. Java, кстати, выбор тоже хуже, потому что сборка мусора здесь не нужна, перегрузки операторов нет, и вообще система типов не очень.
>>880674 Я впервые за долгое время нашел посильную задачу, которая мне по фану, так что я почитаю по поводу синтеза звука приерно составлю схему в голове, как это делать и может даже запощу в тред какие-нибудь бенчи через некоторое время.Просто мне реально хочется примерно дохуя независимых процессов, которые можно будет добавлять - убивать в риалтайме, а писать такое на цэ мне просто страшно Ну и плюс я очень устал от императивного говношлепства на раби в последние два года, хоть и за хорошие деньги, потому я бы лучше поработал на чем-то радикально другом
>>880675 А литературы не подскажешь ? Интересуют архитектурные моменты, как сделать максимально качественный осциллятор программно, складывать несколько волн и пихать их в аудиовывод. Я конечно и сам уже погуглил, но вдруг ты что-то уже читал и можешь порекомендовать или отсоветовать.
>>880749 У тебя нет независимых процессов, все зависимо, у тебя есть направленный граф, в котором есть источники звука, обработки и сливы. Нужно брать слив, и раскручивать его в обратную сторону, лениво запрашивая данные. Это реактивное программирование с параллельностью, но нужная обвязка быстро делается на любом языке. Эрланг тебе тут точно не нужен, как и убивать в реалтайме какие-то там процессы.
>как сделать максимально качественный осциллятор программно На music-dsp читай сам сайт и его список рассылки. KVR audio еще есть. tldr; Синусоиду можно генерировать наивным образом, пилу и квадрат нельзя, будет алиасинг. Самая простая в реализации технология их генерировать - оверсэмплинг, генерируешь на очень высокой частоте дискретизации, фильтруешь (например, sinc-фильтром), и делаешь даунсэмплинг. Там алиасинг будет, но значительно более тихий. Есть большее колдунство, менее грузящее процессор, например MinBLEP. Более сложные формы волны и FM-синтез делаются только оверсэмплингом, поэтому в современных синтезаторах только он и есть.
>складывать несколько волн Внезапно, с помощью операции сложения.
>>880824 Спасибо, может и не нужен, а жаль, на самом деле
я посмотрю еще, на чем можно по фану это сделать.
Убивать в реалтайме процессы придется, я хочу сделать пучок таких синтезаторов, играющих синхронно, чтобы можно было регулировать их количество прямо во время воспроизведения.
>>884010 Да. Это рил лучше. Это не сильно важно, но у меня немного подгорало от хаскеля, что там синтаксис для списков разный для разных случаев, типа > f [] > f [x] > f (x:xs) в то время как в эрлах все красиво и однообразно > f [] > f [x] > f [x|xs]
Вообще говоря, я зря доебался. Я сейчас понял, что в erlang всё норм с синтаксисом и [H|T] это не матчинг списка, а матчинг cons-пары (списков в erlang в нормальном смысле нет, т.к. это язык без типизации). [H|T] некорректно сравнивать с x:xs из Haskell, а нужно сравнивать с (h,t). Ок, все претензии к инфиксности-хуинфиксности снимаю. Такой смешанный синтаксис для матчинга пары — норм.
>>884053 В эрланге не принято так мыслить. Let it crash Если процесс не знает как использовать апи или работает не верно, то он не достоин жить. НЕ НАДО пожалуйста переносить философию хаскела в эрланг. оно тут не скомпилица :)
>>883981 Благодарствую, вчера столько говна перелопатил, а на рутрекере то и не додумался глянуть
>>884053 Dializer И можешь пощекотать анус в compile-time
Я щитаю это охуенно, используешь тогда, когда тебе это выгодно. И не нужно постоянно думать как ублажить компилятор. А юзкейсов, где мне бы понадобилась интеграция типов в рантайм, я чет не могу придумать. Могу предположить что это бы могло пригодиться в метапрограммировании, но чет хз. Надеюсь практикующие статикоштангисты меня просветят
>>884037 Ну так икс - элемент, а иксес - список же. В этом плане все логично. У меня вот к другому претензия: я до сих пор нет-нет, да и прочитаю х:хс как "икс имеет тип хс". Символов им мало, блждад?
>>884078 Код же по-разному проектируешь. К сожалению, это только в теории "давайте сперва хуяк-хуяк и в продакшен, а как наймем еще десять человек - прикрутим типы и все будет заебись". На практике это не работает, кложурцы проверили на реальных кодобазах.
>>884097 Ну да, ты можешь мыслить от верхнего апи и реализовывать то что тебе надо чтобы апи работало (top-down). А можешь мыслить от структуры данных, которая тебе надо и писать функциональный интерфейс к этой структуре данных (bottom-up). В эрланге помоему оба подхода отлично живут друг с другом и кложуровцы, помоему, именно что доказали то, что bottom-up подход очень эффективен. Имхо хаскел через чур защитен. Мне просто не надо на столько типобезопасный код, это приятная фича, но цена слишком высока. Типы очень многословны, требуют поддержки и тупо вообще никак не дружат с распределенными системами и недетерминизмом. Я не говорю про идрис, там зависимые типы вроде позволят тебе самого себя в жопу выебать и проверить математически что ты это сумеешь, но как по мне, то это еще более тяжелая штанга, нахуй нахуй. Проще(и быстрее в моем ковбойском стиле программирования) двигаться напрямую к цели по золомоу пути используя top-down подход и в случае какой-нибудь хуйни супервизор скинет трупец процесса в ганг. Кложур мне нравится всем, кроме того, что они не умеют в акторы, ну и соответственно у них нету своего OTP, во всем остальном наверное это самый крутой, сейчас доступный язык программирования.
>>884057 Да я кагбэ не против подхода эрланга. Просто меня проклятые писатели книжек запутали "списками" (которых нет) и я был недоволен синтаксисом матчинга. Который на самом деле матчинг пары, а не списка.
>>884141 Ну все-таки типы недетерминизму и распределенным системам как минимум ортогональны (если забыть на время про пи-калькулюс и линейные типы). И многословными они не являются, вывод типов же.
Но речь не об этом - мой поинт был в том, что опциональные системы типов, когда сперва пишешь на динамическом языке проект, а потом сверху нахреначиваешь туда типов, - они не работают. В кложуре как раз была инициатива запилить такую систему типов на основе typed scheme. Собрали деньги, сделали исследование (чувак там мастер'с дигри на этом защитил вроде, лол), запилили код, отрелизились, их начали использовать в продакшене чуваки из серклсиай. Ну в общем все вроде бы круто. А потом через полгода где-то те самые чуваки и говорят: не, нахуй это все, ебались мы с этими типами, ебались, и в итоге пришли к выводу, что это того не стоит: цена поддержки слишком высока.
А слишком высока она из-за того, что а) все библиотеки динамически типизированы, приходится писать к ним аннотации, если хочешь тайпчека б) уже написанный динамический код часто имеет слишком сложный тип, так что приходится переписывать уже рабочий код только ради того, чтобы написать аннотацию типа в) нет нормального вывода типов.
Так что в теории опциональная типизация - это вроде бы хорошо и удобно, как раз избавляет от этой чересчур защитности. Но на практике - ад, пизда и израиль, не работает это. Если уж брать типы, то полноценные, как в хачкеле, вот.
С другой стороны, кложур.спек выглядит очень многообещающе, например. Если они потом смогут прикрутить к нему какие-то статические проверки, то это будет очень интересно.
Да, кстати, насчет акторов в кложе - насколько я помню, там были отдельные бибилиотеки, которые давали обработку ошибок как в эрланге и более эрланг-стайл обертку над агентами, в том числе распределенную. Но это все отдельные библиотеки, а вот единой платформы к сожалению нет, а в этом случае целое больше суммы своих составляющих, как мне кажется. Вообще, мне больше всего жаль, что эрланг-стайл обработка ошибок там не прижилась, по-моему было бы очень в тему.
>>884504 > А зачем в принципе нужны были типы ребятам из circle ci? Как раз я считаю что если ты пишешь с типовой системой типа как в хаскеле то ты приседаешь со штангой долгие часы выводишь типы которые тебе надо пилить и потом пишешь код который должен матчиться в эти типы, или тайпчекер скажет "пішов нахуй". И все ради чего? Ради иллюзии защиты от крашей в рантайме. Концепция тестов мне кажется на много лучше подходит для того чтобы описать корректное поведение программы. Есть тысячи способов как программа может вести себя некорректно, все даже нельзя себе представить и всего лишь 1 способ корректен. Ты просто пишешь тест на этот 1 способ и это дает мне необходимую уверенность чтобы писать код на эрланге и применять top-down подход когда я пишу именно 1 тест на самый благоприятный путь и потом ковбойствую до победы. Но кому-то и эта уверенность не надо, он просто знает что делает и пишет код который достаточно прост, чтобы его вообще не тестировать. Мало шестеренок => нечему ломаться. Главное смириться что отказов полюбому не избежать, нельзя предугадать состояние программы на 100%. Отказы будут случаться в любом случае и никакая типовая система и жесточайший тайпчекер не спасут тебя от этого (ну кроме может какой-нибудь ебы на зависимых типах, но это для особых любителей). В эрланг системах отказы это ожидаемое поведение.
>>884923 > Зачем нужны были типы Чтобы повысить качество кодобазы, чтобы была документация, чтобы было больше уверенности при внесении изменений. Все как обычно же. Кодобаза растет - вот и думали, как ее эффективнее поддерживать в хорошем состоянии.
Типы - это не про "иллюзию защиты", это про корректное проектирование. Слушай, эта тема уже тыщу раз разжевана, мне лень сейчас опять тут расписывать.
Тесты не могут описать поведение программы, они только дают примеры. Нет никакого одного корректного способа, ты чего? Для того, чтобы описать тестами хотя бы целочисленную функцию инкремента (только корректные ее вызовы!), тебе нужно по одному примеру на каждое возможное значение целочисленной переменной в твоем языке. Короче, извини, но твой подход попросту некорректный и ничего не дает (кроме той самой иллюзии защиты) - по-моему в любой книге про тдд написано, что тестировать нужно в первую очередь corner cases, а не самый благоприятный путь.
Я уж молчу про то, что тестирование by example потихоньку устаревает в пользу тестирования by specification - которое, кстати, Джо Армстронг и придумал, хе.
Наконец, ты путаешь отказы и некорректное поведение. Лет ит краш не имеет никакого отношения к корректности. Лет ит краш - это способ обработки исключений. Корректность (ради которой пишутся тесты) - это другое, совершенно ортогональная вещь.
>>885110 >ТОРОПЫжКА бЫЛ ГОЛОДНЫЙ >ПРОГЛОТИЛ УТюГ хОЛОДНЫЙ >А В бОЛЬНИЦЕ ГОВОРЯТЖ >С УТюГОМ - ИДИ НАЗАД! >МЫ ТАКИх бОЛЬНЫх НЕ ЛЕЧИМб >МЫ ТАКИх бОЛЬНЫх - КАЛЕЧИМю >ЦЩю
>>885148 Ну я не согласен, командир. Корнер кейсы ты не знаешь, ты знаешь только то, что от тебя требуется. И лет ит краш это не просто способ обработки ошибок, эта тема немного глубже.
>чтобы была документация тайпспеки, а вообще нормально функции называть в первую очередь. >чтобы было больше уверенности при внесении изменений Для меня так работают зелененькие тесты и я им доверяю больше чем типам, там у меня конкретно список того, что мне надо, для того, чтобы моя система считалась рабочей, не больше и не меньше.
Качество кодобазы будет лучше если руки будут не кучерявые, а во время написания кода не отвлекаться на ютубчик, типы прибитые гвоздями не уверен что в этом деле помогут.
>>885198 Ну как не знаешь? Если функция получает список, например, - то надо передать ей пустой список в первую очередь. Если натуральное число - то надо передать минимальное и максимальное значение. Ну и так далее, генеративное тестирование как раз этот процесс хорошо автоматизирует.
Вкинь хороших материалов про то, как лет ит краш относится к корректности программ тогда, я бы почитал.
> тайпспеки Ну дык... Как бы... А я про что? Про тайпспеки и говорю. Которые еще и чекаются.
Алсо, по-моему несколько самонадеянно с твоей стороны говорить, что у ребят из серклсиай руки кучерявые, они функции именовать не умеют и вообще дураки, а не были б дураками - типы бы им и не понадобились. Ну как-то странно это, согласись.
И еще раз: тесты и типы - это вообще ортогональные вещи, тесты не могут заменять типы (и наоборот). Типы дают тебе интерфейс, который ты не можешь поломать при внесении внутренних изменений в систему - я это имел в виду. Тесты тоже в приннципе могут служить интерфейсом, но только генеративные, когда ты спецификацию пишешь, а не example-based.
>>885369 >Ну как не знаешь? Если функция получает список, например, - то надо передать ей пустой список в первую очередь Ну это ты слишком упростил, тут нечего комментировать, об этом вообще не стоит париться. Не надо тестировать все на свете. Тебе надо тестировать поведение процессов или модулей с бизнес-рулами. Тесты будут почти полностью соответствовать тому, что кастомер ожидает увидеть от системы или другие процессы ожидают увидеть от процесса который ты тестируешь. Если тесты не покрыли какой-то особенный баг, как ты говоришь, корнер кейс. То это значит только что ты добавляешь еще один кейс в тестовый модуль и исправляешь баг. Не надо придумывать все возможные баги еще до того как они появились. У меня тесты высокоуровневые, я проверяю конкретно фичи и в тестах отображаю стори от кастомера. Я не тестирую всякую перхоть и не пишу тесты на каждую функцию. Только самый верхний интерфейс, если где-то случается ошибка, то это абсолютно ок, мой процесс упадет сразу же и я посмотрю логи об ошибках. Лет ит краш это не просто способ обрабатывать ошибки, это то, как ты думаешь об ошибках в общем при разработке. Когда ты пишешь код, ты не используешь вообще никакой попытки проверить результат на корректность, никогда не проверяешь на nil лол и никогда не бренчишь свой код, ты идешь к цели напрямую, защиты нету вообще никакой, кроме случаев где она нужна, это и есть исключительная ситуация их очень мало и там правильно будет если за тебя все поправит супервизор опять же, но если тебе таки очень надо защититься внутри одного процесса(Бывает ну писец как редко) то уже тогда развлекаешься с опшианал тайпами и добавляешь ветвления(И ЛОГИРУЕШЬ!!!). Литературки подкинуть никакой, к сожалению не могу, потому что не видел ее, это сложно объяснить на словах, меня учат этому на проекте, причем в основном через кровь. То есть я сначала пишу в защитном стиле и потом мне опытные ребята объясняют почему то, что я сделал это не достойно мержа. Сам принцип в общем такой: вообще ничего не проверять и идти напрямую к цели, освободить свою голову от этой неуверенности что что-то там сломается и все такое, когда сломается, тогда и будешь об этом думать, либо если не надо чтобы ломалось. То линкуешь с супервизором. Но никогда(или ахуеть как редко) не проверяешь коды возврата или умалчиваешь неопределенное состояние системы. Состояния только 2, либо все ахуенно, либо все поднимает супервизор (сорт оф ахуенно, завтра поправишь)
По поводу сёркл сиай, я на сёркл сиай ничего не гнал, но для меня реально выглядит это глуповато. Ну какие типы в лиспе то, зачем. Ну ладно, никого не хочу обидеть. Просто я считаю что надо в первую очередь учиться программировать и мыслить так, чтобы задачи решались быстро, функционально и имьютабельно и чтобы получались impress your cat systems. А типы это такая психологическая ловушка, ребята их юзают из-за неуверенности. В тех системах, с которыми я работаю и где активно применяется эрланг, отказы это нормальное состояние и статическая типовая система сделает эрланг не эрлангом, а хер пойми чем. (каким-то хаскелом :o)
При всем при этом мне нравится по вечерам поаутировать в какой-нибудь теорем прувер и посмотреть на типизированные лямбдочки, но это то, что вообще нельзя пускать в эрланг системы, это совсем другой мир.
>>885478 >Тесты будут почти полностью соответствовать тому, что кастомер ожидает увидеть от системы или другие процессы ожидают увидеть от процесса который ты тестируешь. Если тесты не покрыли какой-то особенный баг, как ты говоришь, корнер кейс. То это значит только что ты добавляешь еще один кейс в тестовый модуль и исправляешь баг. Не надо придумывать все возможные баги еще до того как они появились. > Если тебе надо доехать из точки A в точку B, то надо расставить столбы так, чтоб удары об них не давали съехать с нужного направления. Если вдруг оказалось, что столбы не покрыли какой-то участок пути, то это значит только что ты вкапываешь ещё один столб. Не надо вкапывать все возможные столбы до того, как съедешь в кювет. Типикал test driven development.
>>885485 Так ты не будешь предлагать альтернативу? Рич Хики предлагает простоту, но там где без простоты не обойтись (процессы и бизнес требования) там нужны тесты. Что ты можешь сказать против такого подхода или как его можно улучшить?
>>885478 Нет, баг и корнеркейс - это все-таки не одно и то же. Я согласен с твоим первым абзацем в целом. Я имел в виду, что тестирование by example наиболее эффективно не тогда, когда ты пишешь только какой-то типичный пример того, как код будет использоваться, а когда ты сразу проверяешь какие-то граничные условия - потому что именно при них чаще всего обнаруживаются ошибки. Это просто бест практис такой, в любой книге по тдд это описано, как я уже сказал.
Про лет ит краш и ошибки - опять же, ты понимаешь под ошибками какие-то конкретные отказы системы. А я говорю про корректность. Это разные вещи. Если у тебя в системе возможна атака на переполнение буфера, xss какой-нибудь или просто-напросто ее поведение не соответствует спецификации - это не ошибка в том смысле, о котором ты говоришь. Ничего не упадет и не поднимется, просто ответ будет неправильный. И говорить "ну когда найдем баг - вот тогда и поправим" в таком контексте - это как-то не очень, согласись. Когда у тебя сольют базу с данными юзеров, например, поправлять баг будет уже поздно.
Конечно, практически невозможно предусмотреть все варианты развития событий, если ты не гребаный робат, некорректное поведение все равно будет. Но твоя задача как программиста и проектировщика как раз в том и состоит, чтобы минимизировать эти риски, разве нет? И искусство тестирования, если это можно так назвать, в том и состоит, чтобы интуитивно увидеть, что может пойти не так, и проверить это до того, как оно утечет в продакшн.
Наконец, типы - это не психологическая ловушка, это математический формализм. И в лиспах они достаточно давно были таки. И лично я не вижу, каким образом типы противоречат философии эрланга. К тому же, они там все равно есть, просто проверять их или не проверять - это вопрос удобства.
>>886005 Ты все верно говоришь. Но мне кажется тут уже начинается какой-то околорелигиозный спор, что важнее и о чем стоит рассуждать, я думаю это зависит только от внутренного состояния программиста. Может я не дорос, а может ты, я не знаю. В любом случае я со всем согласен. Но я предпочитаю не задумываться о том, на что я не могу прямо повлиять или что просто не требуется и не сделает мой код лучше или жизнь легче. Например от моих программ не требуется 100% корректности и чтобы ее достичь мне надо потратить огромное количество сил. Я интересовался в какой-то момент этими вопросами и пытался присесть со штангой, но у меня не получилось и я решил что для меня будет много полезней смириться с тем что я не совершенен и мои программы соответственно тоже и больше концентрироваться на том, на что я могу повлиять. Например я могу быть лучшим программистом, писать более понятные интерфейсы, применять более явные абстракции и дизайнить подходящие для задач структуры данных, ну и так же оценивать время на выполнение задач и достигать результатов. Когда я наберу достаточно опыта в этих дисциплинах я может вернусь к зависимым типам и теоремам, но пока для меня много полезней про эти вещи не задумываться. Как минимум я лучше высыпаюсь. :)
>>888253 LYSE и Programming Erlang вроде переведены. Но без англицкого освоить будет сложно ибо русскоязычное комьюнити очень не большое и если будут какие-то проблемы, то спрашивать надо будет на английском. Ну и все референсы, доки и остальные книги на английском.
>>888189 Так не, я про стопроцентную корректность и зависимые типы и не говорил. (я воще лишпер, какие мне зависимые типы, лол) Корректность как соответствие спецификации, то есть адекватность задаче. Это не обязательно подразумевает формальную верификацию, тут все от задачи зависит.
Но вообще да, разговор куда-то совсем в абстрактные философские высоты потихоньку уходит, так что... "Отличное начало; кажется, пора завязывать." :3
>>888345 Привет! А про что ты говорил? Что ты используешь чтобы повысить корректность программ и ужесточить структуры данных с которыми ты работаешь? Если это конечно не зависимые типы и моноид в категории эндофункторов. Проперти-бейзед тесты? Может есть какая хорошая литература?
>>893107 >Две недели должно хватить Хуясе, это я один такой тормоз, что одну книжку месяц читаю, а если делать хотя бы часть упражнений и вдумываясь разобрать каждый кусок кода может и на полтора растянуться?
в чем, по-твоему, выигрыш скалки? какое-то гипотетическое удобство написания или не менее гипотетическая персональная производительность? напомню, что ты пишешь код для корпорации, корпорацию не ебет ни твое удобство, ни твоя персональная производительность, у них совсем другие критерии, типа TCO (как пример), и по этому критерию скала выигрывает только у ассемблера.
Подустал от руби экосистемы(5+ лет опыта ), начинаю щупать альтернативы, пайтон не интересует(такое же болото).
Феникс интересен, Жозе тот еще евангелист, правильно понимаю что лучше пару недель потратить на Эликсир и лишь потом смотреть Феникс? Нужен ли Erlang, в принципе или на первых порах можно обойтись?
Иду по getting started с сайта эликсира, есть роадмап проверенный уже по гайдам/книгам? Спасибо!
а зачем? если честно ведусь на хайп, ну и джаву не очень люблю, пусть даже в виде кложы, личное предпочтение.
А по собственному опыту? Просто боюсь начать с Ерланга, перегореть и обосраться, а по итогу окажется что он и не нужен особо
Ну то есть по примеру Си Руби Рельсы, я си только с универского курса знаю, и за более чем 5 лет работы с рубями и рельсами мне си не понравились. Вру один раз понадобились для перфоманс тюнинга и все.
>>901565 >правильно понимаю что лучше пару недель потратить на Эликсир и лишь потом смотреть Феникс? Да. Вообще в сети учебников/гайдов навалом, но начать лучше со стандартной комбинации Programming Elixir/Metaprogramming Elixir, но не сильно на ней зацикливаться. Эрланг учить не обязательно.
>>901580 Ну просто с руби обычно в кложу укатываются, вот и спросил.
Ерланг с си я бы не стал сравнивать, ну вообще никак. В ерланге главное отп, а не сам язык. Уж перкгореть ты точно не перегоришь, но зато поймешь, откуда у элексиров ноги растут. По-моему имеет смысл короче.
>>902725 Раскажи вкратце про опыт использования, плюсы-минусы, корнер кейсы. Если ковырял фениксы, поясни за отличия. В ближайшее время пользовать не планирую, но простынку от анона бы почитал
>>902823 С прувером есть рабочее ядро. Уровня примитивных лиспов на 300 строчек. В этом и заключается суть работы. А то что языка верхнего уровня для теорем нет, то такое. Еще будет. Не все сразу. На самом деле OM — это адванснутый порт Morte с Erlang таргетом.
Даже если вы никогда не будете писать на эрланге, сделайте следующее:
1. Запустите erlang шелл и посмотрите на observer. 2. Почитайте как работает Erlang VM. 3. Поймите, что для программирования достаточно паттерн мачинга, функций, модулей и receive send. 4. Не учите OTP ни в коем случае, учите vanilla erlang, именно на vanilla erlang написан N2O Synrc стек, OTP — это говно мамонта которому 30 лет.
На самом деле Erlang — это трушная LISP машина, как Smalltalk например. Это культурка как APL, K. Это достаточно хорошая виртуальная среда, чтобы начать строить на ней свой мир, что мы и сделали. Никто не говорит вам бросать сишечку или свои руби, но почувствовать вкус Эрланга нужно, вы поймете, что остальные современные стеки, включая даже один из самых технологичных минималистичных — Clojure — переусложнены. Пока вы не столкнетесь с Эрлангом вы это не поймете. Даже Хаскель после эрланга не кажется такой уж хорошей идеей. Ну и вообще CPS интерпретаторы — это особый класс и он никогда не пропадет несмотря на GHC и LLVM более технологичные решения позволяющие делать глубокие оптимизации.
Несмотря на то, что мы отошли от дел и текущим майнтейнером Synrc стек является московская группировка Erlang One мы крайне рекомендуем серьезно отнестись к нашему стеку. Если лежит душа в Эликсир прыгайте незамедлительно, так как я писал месяц на эликсире и это не тот эликсир который был еще год назад, прогресс — колосальный!
>>902867 Спасибо, потом ознакомлюсь. Правда действительно ли мнезия так будет круче постгреса? И правда ли эрланг труевейший лисп чем кложур лол >>902862 Привет Максим. N20 выглядит слишком лунно. Я лучше на фениксе в вебе буду кататься или на голом плаге. Будешь в Минске сигнализируй :)
>>902869 Мнезия не круче постгресса. По своему устройству мнезия больше классифицируется как MUMPS или KDB. Впринципе мнезия такое же говно мамонта как и OTP, она часть OTP. Но для вебчика ее достаточно. То где в 80% используют постгресс для стартапов где надо меньше 1000000 пользователей в секунду Mnesia отличный вариант так как позволяет быстро забустрепится. Меня Ecto адаптері не впечатлили, KVS стек круче думвю, да и у него версионирование есть. Ecto бедноват.
>>903662 Разницы между ними очень мало, в Эликсире только сахарка накатили. Мне лично по душе Эрланг и его хардкорный Prolog-inspired синтаксис. Можешь начинать с него, но я вангую, что ты всё-таки охуеешь, если он тебя первым будет. Даже книги ни одной нет для ньюфагов, все полагают хоть немного знания о языках.
О, нихуя себе, эрланг. Говно. Писал на нем за деньги некоторое время назад, сейчас выкатился. Уебищный дсл для написания распределенных систем. Ах да, он еще и ТОРМОЗИТ.
>>914942 >ще и ТОРМОЗИТ На какой задаче он у тебя тормозил? >пок-пок никрасивый кудааах! Я осознаю, что существуют безмозглые пидоры, у которых в список значимых кримериев может входить, к примеру, синтаксис языка. Hу так накласть на них. Интересуют объективные критерии, а не цацки всякие.
Посоны, имею возможность вкатиться в эликсир налегке - после рубей и рельс предлагают работать с эликсиром и фениксом. Вопрос такой, а насколько это правильно - не работая с эрлангом начать работать на эликсире? Это будет какой-то принципиальный пробел в знаниях и понимании или это норм?
>>915885 Ну вот был недавно эликсир митап полный рубистов, первые выступающие рубисты рассказывали как за пару-тройку дней переписали сервис с руби на эликси и оно заработало. Эликсир все видели в первый раз. Ну правда там и в общем опыт разработки был ~6 лет емнип.
>>915885 Можно без эрланга. Ну то есть, если бы ты его знал - было бы проще, конечно, так как меньше осиливать пришлось, но вообще и так можно. К тому же чтоб феникс программировать скорее больше рельсовые знания пригодятся, чем эрланговские :D У рельсовиков чаще затык с переключением с ActiveRecord на Ecto, чем с какой-то OTP ёбой.
Так че там с эликсиром, взлетит, количество вакансий в ближайшие пол года\год повысится? Я просто сейчас рельсы дрочу, но нихуя для джуна вакансий нет. Начальные знания эрларга есть, феникс тоже немного колупал, да и другие всякие йобы знаю. Так что посоветуете аноны: дрочить сразу эликсир и посвятить все время ему, писать в стол, коммитить в эликсировские проекты и ждать пока на птицевакансии начнут брать джунов или продолжать дрочить рельсы? В каком случае я раньше от голода умру?
>>916002 Не думаю что в ближайшие несколько лет можно будет устроится где-то на эликсир джуном. Это вообще нонсенс, эликсир и джун. Разве что напрограммировать себе стажа хотя бы до мидла, а там можно в удалённый проект куда-то вкатится попробовать.
>>915885 я бы не нанимал джуниора без опыта. Ты же все сломаешь нахуй и ничего не напишешь, смотреть еще за тобой. Кому это нахуй надо кроме больших компаний? Ну а дальше ищешь большие компании и понимаешь что там эликсира нету.
>>917792 Интересно, как тогда по твоему получаются эрлангисты и эликсирщики, если большие компании эти языки не используют, а джуниоры без опыта на этом языке все ломают нахуй и их лучше не нанимать?
Даже в начальной книжке от Джо Армстронга подразумевается что у тебя есть какой-то бекграунд разработки серверов, вполне справедливо. Я не понимаю вообще, как может эрланг закатить как первый язык программирования, он хорош в сравнении с другими языками в определенных нишах, как это вообще может подкупить новичка? И нах такой новичок надо? Сам бы нанял такого девелопера?
>>916002 На hh по ДС динамика околонулевая. Не думаю, что что-то изменится в ближайшие год-два, а в итоге, скорее всего, и не взлетит Эликсир. Компании предпочли олиГОФЕРена.
>>917805 Когда был нуфагом, меня подкупил эзотерический синтаксис.
>>917805 >Посоны, имею возможность вкатиться в эликсир налегке - после рубей и рельс предлагают работать с эликсиром и фениксом. Это по твоему не бэкграунд? Я не тот анон, но ты какую-то хуйню на его пост написал
>>917976 Бля и правда хуйню написал. Я как-то прочитал по диагонали и думал что у чувака 0-й опыт. После руби и рельс нормально, но надо прочитать тот же программинг эрланг и что-нибудь по OTP(хотя если делать планируется на фениксе то не обязательно, можно обойтись только книгой Джо Армстронга)
>>917820 Ну не правда. Язык в авангарде, но и не мертв, а весьма бодро развивается для своей ниши и своего комьюнити. У го и эликсира мало пересекающиеся парадигмы при близкой нише. Обязательно будут команды как на го так и на эликсире, ну на эликсире меньше. Но тебе же и не много надо команд, а всего одна :)
Сап потокослесари, где можно почитать об устройстве виртуальной машины ерланга, узнать почему она такая охуенная. Да и вообще в целом какое-нибудь чтиво, поясняющее таинства виртуальных машин. А то я на базовом уровне знаю, но это знания уровня хеллоуворда на хаскеле
>>927150 Правильно делаешь, посоны не ходите, там цп. Дали пять лет исправительного программирования на коболе. Теперь сижу в кандалах, опердени сопровождаю, выдали элт монитор и засаленую мышку с шаром. Эрланг со всех машин деинстальнули и не разрешают качать, вся жизнь под откос пошла, чтож ты делаешь
>>927182 Статические опердени на коболе. Тяжело, братан, понимаю. Это тебе не штангу тягать и не вижеокурсы в пинджаке продавать. Тяжело, братан. Держись.
Я не помню как именно ведет себя эрланг, если у него исчезнет соединение с удаленной машиной (предполагаю, что N раз попытается переконектиться, потом выдаст ошибку), но эта ситуация в любом случае обрабатывается не на уровне сообщений между акторами, а ниже. На уровне сообщений между акторами ты не должен думать о том, что сообщение не дойдет, как ты не думаешь об этом, когда делаешь, скажем, REST-сервис и хэндлишь урл-запрос. Гарантию доставки сообщения на себя берет нижний уровень - TCP/IP. А срубленный кабель это форс-мажор, который в любом случае выведет систему из работоспособного состояния.
>>927563 > А срубленный кабель это форс-мажор, который в любом случае выведет систему из работоспособного состояния. По идее сириус бизнес системы должны переживать кластер партишоны, и просто сгоревшие сервера, вот я и пытаюсь понять, как этого добиться.
при асинхронной передаче Алиса отсылает Бобу сообщение и ей похуй, пришло ли оно. При синхронной, Алиса ждет сообщение таймаут и потом умирает, не дождавшись (кабель перерубили какие-то пидоры). Сева, личный врач алисы, когда увидет на мониторе что у Алисы отказало сердце, поставит на место Алисы, Алису1 и заставит переделывать задачу, на которой Алиса остановилась, возможно надо будет еще позвонить бобу и сказать что Алиса мертва, поэтому забей на все с чем рулилась Алиса и вот знакомься, это Алиса1. Так понятно? А вообще, качай книжку Programming Erlang, там про все это написано.
>>927580 Всмысле? Опиши задачу и тогда придумаем решение, сферических дженерик способов все сделать заебись нету, за это нам бапки и платят. Какие кластеры? >>927599 Бесит? Ну ладно, держи нас в курсе :) Наверное просто ты не знаешь что Алису с Бобом юзают потому что у них имена начинаются на А и Б, вот и бесишься.
>>927568 например riak так и делает и там всё очень просто - посылвается сообщение не одной ноде, а ей и её репликам, а дальше все эти ответы руками мерджатся (на самом деле только при кофнликте) https://habrahabr.ru/post/75202/
>>928220 наркоманкая хуита более наркоманская только unlumbda, программировать на комбинаторной логике, пиздец развлечениние, для этого нужен особый парень
>>928408 может потому что в ерлаше строки тоже списки
>>928220 >>928411 >может потому что в ерлаше строки тоже списки Охуеть вообще, один Форт находит в 2017, другой вообще не знает, что почти во всех языках строки это списки.
>>928452 В каких это почти всех? Только в старье всяком, во всём более менее современном String - это String, а не список чаров, список интов или список ещё какой-то хуиты.
>>928454 В качкеле - лист, в крестах - лист, гопараша - туда же, в D вроде бы тоже самое, не помню. Руби, js, питон - ну да, тут нет чаров, но в остальном такое же поведение + мутабельность. Какая именно характеристика делает "String - это String"? И почему для тебя это так важно? Весь тред тут со своими строками носишься.
>>928469 в руби есть чары и со строками можно работать как с массивом. Так что тоже мимо, у меня такое же непонимание как у тебя, бро. Да и строки используются как набор чаров только когда надо, в остальных случаях всегда бинари.
Я этого наезда не понимаю, ой у вас строки это список чисел, ну да хули, заебись хуйня. Можно заворачивать в {string, <<"mamku ebal">>} если хочется свой особый тип для строк
>>928649 >>928469 Да невозможно удобно работать в эрланге со стрингами, потому что там НЕТ настоящих стрингов, нет такого типа, поэтому их почти никто там и не использует, бинари на входе - бинари в системе - бинари на выходе, всё если нужно сделать конкетнацию - просто юзают иолисты с теми же бинарями
>не понимаю ну да, это же так охуенно когда у тебя is_list выдаёт true и на строку и на список с хуй знает чем, и "pizda" матчится с [Ti|Hui], а когда нужно работать скажем рекурсивными функциями с гетерогенным списком, где могут быть строки, а могут быть списки со строками, или с списки с дилдами, или списки с интами в перемешку с уникодовскими кодепойнтами - это так всё весело просто пиздец. Видишь в программе где-то гуард do_shit(A) when is_list(A), стразу интуитивно понятно что человек ждёт строку на вход, ага я уже не говорю о ебле с конвертациями туды-сюды через блевотный unicode модуль когда работаешь с юникодом короче это был изначальный проёб эрланга и в эликсире String сделали поверх бинари, в эликсире x = "abc" значит что x - это бинари закодированный в UTF-8, но так как там ещё есть и сигилы, то в принципе значение того что в "..." можно менять просто указывая префикс, вжух ~r"...." у нас регулярка, вжух ~c"..." у нас чарлист, вжух - список атомов, плюс наконец то нормальная интерполяция типа "text goes #{here_int} times in #{here_struct} because #{here_string}" без бесконечных эксплиситных конвертаций и ++.
>>928938 так а почему тебе и правда не замотать строки в кортеж {string, list()} если так уже жопа горит, и матчся на них сколько душе угодно. Ну серьезно.
>>928948 ага чтобы потом везде в коде делать {string, MyString} = MaybeString do_huita_with_my_string(MyString)
а так же case MaybeString of {string, String} и так далее в таком же ко-ко-ко стиле охуенное решение, напоминает самый уёбищных json парсер для эрланга всех времён и народов mochijson2 с его {struct, [{strKey, <<"strVal">>}, {intKey, 10}, {arrayKey, [1, 2, 3]}]}
>>928953 Я не понимаю в чем проблема. Юзаешь везде бинари. Когда надо поработать с кодпоинтами, то используешь определенные модули. У тебя есть предложение как сделать лучше? Давай внесем рацуху. Если ты предложишь что-то пиздатое то так и быть, сделаем предложение пацанам из эриксона. Вируталка опенсорсная и не поносно написана, давай захуярим.
>>928980 ничего уже делать не надо, в эликсире уже всё сделали, а пацаны из эриксона судя по Sigils are great. Erlang could have had these 15 years ago, and they can be added now without breaking backwards compatibility. и так знают что делать
>>929647 Ну если считать стаж чисто в продакшене то 2 года эрланга, 1 год эликсира, 1 год жееса, пол года кложурскрипта, пол года перла, пару лет пехепе, лол.
>>929647 С Эрлангом только играюсь, очень хотелось бы зарабатывать на нём деньги, но в ДС полторы вакансии. А так на работе на Питоне пишу, ну и на ЖС ещё, но это не язык программирования.
>>930199 Если спамлист блочит просто скринчик поста делай.
А жс отличный язык, после плюсов и джавы мне он очень понравился своей простотой и гибкостью. Вангую что это обычный каргокульт, макаки постоянно подхватывают разные мантры от солидных людей. Особенно если какой-нибудь гугль напишет что надо так, а не иначе, все пиздец. В андроиде постоянно такое наблюдаю, еще есть даже дурачки яростно защищающие венгерскую нотацию(в явке это m перед именем поля объекта). Хз че там в правилах приведения сложного, просто не надо, как уебок, запоминать эти таблицы приведения, а вкурить идею зачем так было сделано. Прототипное ооп хаить это вообще дебилизм, напоминает как в пыхе подражают джаве и только делают хуже, я например сразу подорвался в es5 когда в классах не поставил this перед именем поля при попытке присвоить что-то, да и в целом может мне продвинутые jsники объяснят зачем ввели все эти классы, в чем преимущество новой и недостаток старой системы, кроме мифического ощущения ущербности: "ну ебана, все нормальные посоны на классах сидят, а мы как дебилы прототипируем"?
>>930218 > скринчик поста Мне было интересно выяснить, что же было запрещенного в таком безобидном посте.
Ну, справедливости ради - после плюсов и джавы даже анальный секс с неграми тебе покажется веселой прогулкой. Так что это не аргумент. Как язык джаваскрип, конечно, говно - это факт и коммон ноуледж - но вот такое противопоставление ("на питоне пишу, а жс - не язык") мне кажется необоснованным, так между этими двумя языками никакой гигантской пропасти в этом плане нет.
Насчет прототипного ооп соглашусь. Насколько оно удобно - это другой вопрос, но вот подход "давайте сделаем как в джаве чтобы было как в джаве" и "давайте сделаем как в джаве чтобы индусам было проще" лично меня раздражает.
>>930221 Ты ебанусля? Мне в общем-то похуй на дж, но он не настолько плох как о нем постоянно кричат
>>930223 >после плюсов и джавы даже анальный секс с неграми тебе покажется веселой прогулкой. Так что это не аргумент. Схуя это? Я рад если ты начинал с относительно элитных языков вроде руби, эрланга, перла или боже упаси, качкеля. Но это меньшинство. А о хуевости джса как раз часто кричит спласплас элитка, пыхеры, сами жсники неосиляторы или джава-шарпо интерпрайз
>>930229 Да ладно, о хуевости жса "кричит" любой здоровый человек, который с ним сталкивался. Ну говно язык, ничего тут не поделаешь, да все и привыкли уже. Плюсы - оче СЛОЖНА, джава - оче СКУШНА, как-то так.
>>930401 Ну да. Ничего удивительного, Хосе в одной упряжке с Акка тим в рамках Reactive Stream Initiative, и GenStage, как и Apache Stream был написан по их спеке, ну разве что с некоторыми отличиями, вызванными особенностями Erlang-style месседж-пассингом. "E.g. backpressure is a thing that is not easily supported implicitly in Erlang/Elixir in the same way as in FBP languages where the bounded-buffer channels provide implicit backpressure by blocking the sends on the outport they are connected to when the buffer is full." Вообще интересная тема в целом. https://www.youtube.com/watch?v=khmVMvlP_QA
>>845348 (OP) Функционало-господа, обоссыте, но не бейте! Решил для себя (с дальнейшими планами) вкатиться в функциональное программирование. Что выбрать между Эрлангом и Хаскелем? нет, я не троллю Вкатываюсь из жабы, если кому интересно, жаба настоебенила. Знаю что и в эрланге и в хаскеле есть збс веб фреймворки, на которых писать одно удовольствие. я прав?
>>930968 Во-первых, тут на нулевой где-то недалеко был ФП-тред. Ну да ладно. Нужно выбирать Haskell, это флагманский язык из мира ФП. Всякие скалы, эрланги, кложури - они тоже как бы ФП, но они больше не о ФП, а о скрещивании ФП со всякой хуйнёй, с ООП, с метапрограммированием, с конкурентными моделями и т.д. Поэтому если ты хочешь угореть чисто по ФП, без всякой лишней хуйни - выбирай Haskell, а потом уже можешь на всякие гибридные языки смотреть. Добра тебе, путник.
Блять, откуда эти говноеды сюда прибежали? В кунсткамере на помойку выбрасили заспиртованные экспонаты и они скопом вкатились в этот ИТТ тхред? Идите дрочите на свои event-zaloop'ы в других местах
Уважаемые, тред подходит к бамплимиту, посему хочу поздравить всех причастных, потому что предыдущий просто смыло, а этот продержался без малого полгода.
>>934289 просто не обращай на них внимание и не отвечай им и они сами уйдут, бро. >>934289 ссылки на lfe, elixir, дизайн референс otp beam wisdoms, ну и книги указать. Programming Erlang, LYSE, Erlang and OTP in action, Design for scalability with Erlang/OTP, Programming Elixir, Metaprogramming Elixir, ссылку на канал erlang solutions с ютуба, ссылку на erlang central
>>934335 А в тред не вбросил. Ну конечно, давайте все гуглить по очереди, зачем в тред вбрасывать, мы же программисты, мы любит копипаст и не любим экономию.
Да хуйня полная, ни какой логики и аналогий, тупо на одной и той же бабе намалевали логотипов и все. В эрлаче с анимедевочками и то лучше хоть аниме и говно. На соски с пика чуть не блеванул.
Сап эрлач, вопрос не про эрланг, но не гоните ссаной. Планирую переписать одно крупное десктоп приложение которое сейчас на плюсах. В моих влажных фантазиях я разделяю его на модули и пилю эти модули на абсолютно любых языках. Так вот, если ли какая то годная методичка или книга, как это делать, чтобы пояснялось на какие маркеры обращать внимание и где искать границы модулей, как рефакторить и т.д.? Есть ли какие-нибудь наработки по универсальным межязыковым интерфейсам, как вообще организовать общение кусков проги, если одна хуитка на каком-нибудь хачкеле, другая на эрланговском лишпе, а третья на расте? Как ты наверное понял делаю я это для удовлетворения собственных комплексов так что аргументы типа "ко-ко-ко зачем?", "нипрактично", "сука, а мне потом поддерживать" мимо цели. Еще особо не углублялся в микросервисы, но вроде бы это не про то т.к. работы с сетью там вообще нет.
Монолитного говна то набросать я горазд, а вот в такой дзен-модульности у меня чет затуп, помоги аноний
Покажите, пожалуйста, зачем нужен атомарный spawn_link? У меня не получается заспаунить процесс, который тут же делает exit, и не успеть к нему прилинковаться.
>>939381 В programming erlang сказано, что были введены атомарные spawn_link и spawn_monitor специально для тех случаев, когда процесс крэшится до того, как ты успеваешь залинкаться к нему. Но следующие два варианта (spawn_link и spawn + link) работают одинаково - https://ideone.com/VLjMNo
Excellent knowledge of Erlang/OTP; Experience in development of Web-services and server applications using Erlang/OTP, Mnesia; Knowledge of network protocols (HTTP, TCP, UDP, SSL, XMPP etc.) Relational databases PostgreSQL, MySQL; NoSQL storages (MongoDB, Redis) Experience with messaging systems (RabbitMQ) Experience in development of highly loaded and scalable systems Experience with Unix/Linux Advantages
Understanding of Lisp, Haskell functional programming languages
We offer
healthy work in a good team opportunity to learn and participate in trainings comfortable operating environment attractive employment benefits Dnipropetrovsk, Ukraine, remote work
>>947000 1. Я не прохожу их требования, хотя "петушиную тройку" неплохо знаю. 2. Я из беларуси, шило на мыло. Любопытно почем щас качки. Сколько потом просить
>>950456 Посоветуйте тогда по поводу динамической опердени, выжерлангеры. Даже не знаю, где еще на этой доске спросить.
В общем представьте себе мультплеерных шутер навроде квейка. Есть клиенты, есть сервер с риалтаймовым тяжелым вычислением. Теперь добавьте сюда условный майнкрафт, то есть создаваемое\разрушаемое клиентами окружение, которое живет своей жизнью, даже когда никого рядом с ним нет. Задача - сделать это все как можно дешевле по вычислительным ресурсам.
Я себе это так представляю: есть легкие игровые сервера (ноды), которые все держат в памяти и говорят с клиентами по удп. Есть тяжелые глобальные сервера, которые хранят все созданные клиентами карты и список нод, общаются с клиентами и нодами по хттп. Есть легкие клиенты, которые могут сами себе запускать локальную ноду.
Процесс выглядит примерно так: клиент запускает себе локальную ноду, лепит там карту, отправляет ее на валидацию на хттп-сервер, если все ок - он рассылает ее нодам и запускает симуляцию, клиенты подключаются к нодам, хттп-сервер останавливает симуляцию, идет матч с разрушением террейна, в конце матча нода делает дифф между исходной и текущей картой и отправляет новую версию на хттп-сервер, он запускает симуляцию обратно, повторить.
Все правильно? Можно это как-то оптимальней сделать? В частности, при таком сценарии все ноды (кроме локальных, на которых можно отстраивать карту) нужно поднимать мне на своих машинах - мне интересно, можно ли как-то безопасно оптимизировать этот момент, не позволяя читерства. В голову приходит только запись сторонними нодами полного лога всех действий с последующей его прокруткой на доверенных серверах, но это какое-то шило на мыло... Или нет? Самый неоптимальный случай получается, когда к ноде подключается всего один клиент, и мы ради него одного загружаем в память всю карту. Раз клиент один, то и действий на карте будет мало, а значит лог действий можно будет проверить относительно быстро в часы простоя. То есть если клиент на карте один, то ему можно поднять свою, локальную нодуя а нам потом отправить лог действий. Верно или обосрался?
>>951740 лисп это подход к написанию кода. Где ты пишешь весь код в виде AST которое представлено списками, позволяет красиво метапрограммировать да и вообще по заверениям светлых умов поднимает настроение и улучшает аппетит. А эрланг это в первую очередь ахуенная виртуальная машина. А какой язык уже превращается в инструкции для нее не так важно. LFE это минималистический набор специальных форм и эвалюатора для форм. Почти все остальное это макросы и dsl. Подозреваю что для нормальной реализации лиспа поверх BEAM надо описать специальные формы ветвлений, паттерн матчинга, спавна, отправки\получения сообщений. Остальное прикручивается макросами. Тащемта эликсир это тоже макроязык поверх эрланга. Там тоже почти все это макросы и семантика into: и протоколы говорят о том что Хосе смотрел на clojure когда делал эликсир
>>951919 это никак не относится к эрлангу и ты там ничего не распределяешь, у клиента есть реплика состояния но всеравно все синхронизируется через сервер. Ты нормально все написал, зачем оптимизировать то, что еще не написано? Сделай прототип по той модели что ты описал и там будет видно. Модель с виду вполне рабочая, на ней тысячи игровых серверов работает
>>951950 К ерлангу относится, конечно, очень опосредованно, но я все-таки распределяю чуть-чуть - в конце же об этом написал, и как раз это у меня сомнения и вызывает. Ну ладно, раз никто не советует, то не буду навязываться.
Аноны, вкатываюсь в ерланг, нужна ваша помощь. Написал я программу в сублие, сохранил ее как code.erl Как ее скомпилировать и запустить? Читаю книгу, но терминал выдает ошибки Кстати, пытаюсь скомпилировать так: compile:file(code) Но я как только не пробовал, не работает. Если что то запускаю терминал из той же папки где и программа, тут я не ошибся.
Erlang - один из немногих функциональных языков, разработанный специально для применения в реальном мире.
OTP - платформа, содержащая огромное количество библиотек для построения приложений на Erlang, рассматривают с языком как единое целое.
Изначально ориентированный на высоконагруженные распределённые отказоустойчивые системы, тем не менее имеет более широкую сферу применения.
Среди самых популярных приложений, написанных на Erlang стоит упомянуть RabbitMQ, Riak, CouchDB, Wings3D, сервер-сайд WhatsApp и Chef.
Язык поддерживает все основные концепции функционального программирования, но при этом не перегружен академичностью, писать на нём легко и приятно.
Кажущийся с первого взгляда перегруженным синтаксис очень быстро становится привычным и интуитивно понятным.
Elixir - язык созданный для виртуальной машины BEAM, соответственно имеет те же самые преимущества. При этом имеет более привычный синтаксис в духе Ruby/Python, а также унаследовал от Lisp-семейства мощную систему макросов.
1. С чего начать?
http://www.tryerlang.org/
https://github.com/patrickgombert/erlang-koans
2. Что читать?
Joe Armstrong "Programming Erlang"
Fred Hebert "Learn You Some Erlang for great good!"
+книги из шапки ньюфаготреда
3. В чём писать?
Emacs + erlang-mode
Vim + https://github.com/vim-erlang
Sublime Text
Intellij Idea + Erlang плагин
%% принимаются предложения и замечания по шапке треда