Я вижу много дерьма в Интернете о том, как Эрланг пинает задницу node.js практически во всех мыслимых категориях. Так что я хотел бы выучить Эрланг и дать ему шанс, но вот проблема. Я обнаружил, что мне гораздо сложнее забрать Эрланга, чем я взял нод.js. С помощью node.js я мог выбрать относительно сложный проект, и через день у меня было что-то работающее. С Эрлангом я сталкиваюсь с барьерами, и не так быстро.
Так ... для тех, у кого больше опыта, сложно ли учить Эрланга или я что-то упускаю? Node.js может быть не идеальным, но я, кажется, могу с этим справиться.
Ответы:
Прежде всего, я согласен с ТОЛЬКО МОИМ правильным ответом относительно изучения Erlang. Это в основном функциональный язык (хотя параллелизм играет большую роль), и все его функции были добавлены для обеспечения отказоустойчивости и надежности, что, в первую очередь, не совсем те же цели, что и Javascript.
Во-вторых, оставить Node.js для входа в Erlang немного неуместно. Node.js - это единый сервер / фреймворк, который делает все возможное, основываясь на событиях, с помощью обратных вызовов. Erlang имеет свою собственную платформу (OTP), но она совсем не на одном уровне.
Если вы планируете изучать Erlang, я предлагаю свою запись в блоге Открытое письмо начинающему Erlang (или Onlooker) в качестве ознакомительного чтения, прежде чем углубляться в учебники.
Единственное, в чем вы можете сравнить Erlang и Node.js с точки зрения шаблонов и использования, это то, как они управляются событиями. Однако здесь есть два больших отличия. Модель Node.js основана на обратных вызовах, привязанных к событиям. Erlang основан на очередях сообщений и выборочных приемах. Каковы последствия там?
Прежде всего, если вы делаете вещи на основе обратного вызова, единственный способ перенести состояние в другое - это сделать его глобальным или войти в программирование в стиле продолжения. Во-вторых, вы должны позаботиться о полной матрице событий самостоятельно. Одним из примеров этого является то, что если мы представим очень простой конечный автомат: семафор мьютекса, управляемый событиями.
Семафор мьютекса имеет два состояния: заблокировано и свободно. Всякий раз, когда определенная единица вычислений (рабочий, процесс, функция или поток) хочет получить доступ к мьютексу, она должна вызвать событие, которое говорит ему «я заинтересован». Теперь вам нужно позаботиться о следующих типах событий:
Затем у вас есть дополнительные события, такие как тайм-аут, чтобы избежать тупиков:
Тогда у вас также есть вне связанных событий:
Матрица событий очень быстро становится сложной. Наш FSM здесь имеет только 2 государства. В случае Erlang (или любого языка с селективным получением и асинхронностью с потенциально синхронными событиями) вам нужно позаботиться о нескольких случаях:
Вот и все. Таймеры обрабатываются в тех же случаях, что и при получении, и для всего, что связано с «дождаться освобождения», сообщения автоматически ставятся в очередь: рабочий должен только ждать ответа. Модель намного, намного проще в этих случаях.
Это означает, что в общих случаях CPS и модели, основанные на обратном вызове, такие как модель в node.js, либо просят вас быть очень умными в том, как вы обрабатываете события, либо просят вас полностью позаботиться о всей сложной матрице событий, потому что Вам нужно будет отозвать по каждому несущественному делу, которое возникает из-за странных проблем с синхронизацией и изменений состояния.
Выборочные приемы обычно позволяют вам сосредоточиться только в подгруппе всех потенциальных событий и позволяют гораздо легче рассуждать о событиях в этом случае. Обратите внимание, что Erlang имеет поведение (реализация шаблона проектирования / фреймворка) того, что называется
gen_event
. Реализация gen_event позволяет вам иметь механизм, очень похожий на то, что используется в node.js, если вы этого хотите.Будут другие пункты, которые дифференцируют их; Erlang имеет упреждающее планирование, в то время как node.js делает его совместным, Erlang более склонен к некоторым очень крупномасштабным приложениям (дистрибуция и все), но Node.js и его сообщество обычно более склонны к веб и осведомлены о последних тенденциях в Интернете. Это вопрос выбора лучшего инструмента, и это будет зависеть от вашего опыта, типа проблемы и ваших предпочтений. В моем случае модель Эрланга очень хорошо подходит для моего мышления. Это не обязательно так для всех.
Надеюсь это поможет.
источник
Erlang не сложен в изучении, он просто чужд мышлению, которое констант Chambers (99,44%) программистов усвоили как работает программирование. Проблема, с которой вы сталкиваетесь, скорее всего, просто концептуальная дезориентация, а не фактическая сложность.
Вот некоторые из инопланетных особенностей Erlang, которые собираются укусить типичного программиста:
Таким образом, изучение Erlang будет более сложной задачей для большинства программистов, чем изучение Node.js, особенно если программист уже знаком с JavaScript. В конце концов, однако, как только вы преодолеете концептуальный барьер, я утверждаю, что кодирование Эрланга будет менее сложным, чем эквивалентное кодирование Node.js. Это по нескольким причинам:
Если можете, продолжайте шлёпать по Erlang, а если вы еще этого не сделали, зайдите в « Learn You Some Erlang for Great Good», чтобы получить нежное и (в основном, забавное) введение в концепции Erlang.
источник
Есть несколько существенных различий между Erlang и Node
Во-первых, этот узел - это Javascript, что означает, что он является очень распространенным языком, который имеет много общих черт с языками, с которыми знакомо больше людей, поэтому его обычно легче запустить и запустить. Эрланг имеет часто странный и незнакомый синтаксис для большинства, и, хотя язык намного проще, чем javascript, он требует немного больше привыкания из-за своей уникальности
Во-вторых, у Erlang есть очень специфическая модель параллелизма без совместного использования, она требует от вас другого подхода к решению проблем, и это хорошо (TM)
Последнее, что важно, это то, что Erlang был разработан коммерческой компанией и открытыми источниками после того, как это было, только 2 года назад или около того, что люди могли видеть отдельные коммиты в системе контроля версий, и даже сейчас я не думаю, что все разработчики Erlang переехали для публичного репозитория github для их развития. node.js был создан внутри сообщества с самого начала, это означает, что его поддержка сообщества намного лучше, уже есть гораздо больше библиотек для узла, больше документации сообщества, больше примеров из жизни, вездесущий менеджер пакетов и т. д. и т. д. Erlang догоняет в этом отношении, но его все еще гораздо больше, чтобы подняться.
Node позволит вам программировать забавные вещи довольно быстро и относительно безболезненно, он все еще испытывает трудности с большими приложениями, которые Erlang уже давно решал. Erlang изменит способ программирования и (imo) сделает вас лучшим программистом, однако вначале он не облегчит вам жизнь. Оба забавны по-разному.
источник