Красивый код Erlang [закрыто]

15

Я пытаюсь узнать больше об Эрланге, чем о игрушечных проектах, с которыми я играл. С этой целью я читаю Программирование Erlang и некоторые архивы от Armstrong on Software .

Я также хотел бы прочитать какой-нибудь примерный (предпочтительно рабочий) код, демонстрирующий виды вещей, которые вы можете создать с помощью Erlang, что было бы непропорционально сложно в других языках. Помимо (я полагаю) Yaws , есть ли общедоступные примеры прекрасного кода Erlang, который я мог бы прочитать, чтобы лучше понять язык и / или увидеть идиоматические применения для различных языковых конструкций?

Я специально не ищу код, который «выполняет свою работу», но использует сомнительные практики или примеры в духе «вот как вы пишете factorialна Erlang».

В том же духе, может ли кто-нибудь порекомендовать какую-либо хорошую литературу для изучения этого языка (кроме упомянутого «Программирование на Erlang»)? Для предпочтения, то, что вы сами использовали для изучения, но если есть какие-то стандартные для сообщества книги для этого, добавьте их тоже.

Inaimathi
источник
Erlang был создан Ericcson для разработки и создания параллельных коммутаторов для телефонного трафика. Он был разработан компанией Эрикссон для поддержки распределенных, отказоустойчивых, программных приложений реального времени, без остановок. Это проблемная область, в которой он превосходит. Для всех других проблемных доменов ... Ваш пробег может отличаться.
Роберт Харви

Ответы:

6

Еще один хороший пример - Erlang и OTP в действии .

О примерах кода: довольно сложно найти лучшие практики для Erlang, но я бы посоветовал вам попробовать эти сайты:

Проверьте ссылки из этой статьи (программное обеспечение с открытым исходным кодом, написанное на erlang), и вы можете найти интересный код.

Богдан Максим
источник
-4

Поскольку вы добавили тег функциональное программирование, как насчет написания компилятора или интерпретатора Erlang на Haskell? Эрланг уже не совсем современный, как и все. Я рекомендую выучить эрланг за один-два дня, как и некоторые другие языки (LISP, Prolog), а затем забыть о них; они всего лишь шаг к тому, чтобы отучить императивные ООП-языки.

Для меньших задач, чем реализация компилятора, см. Project Euler .

[РЕДАКТИРОВАТЬ] Чтобы ответить на комментарий:

С технической точки зрения: Эрланг был хорош в старые времена, когда не было многоядерных процессоров. Но теперь - учитывая существующие компиляторы / интерпретаторы, которые у меня есть - он просто больше не масштабируется, как должен. Интерпретатор, написанный на Haskell, будет масштабироваться, скомпилированный в Haskell сделает его быстрее, но уберет функцию замены кода на лету.

С точки зрения программистов: Haskell не для всех применимых задач лучший выбор, но, пожалуй, более продвинутые языки очень экспериментальны, и эти неприменимые задачи обычно имеют отношение к встроенным системам (таким как микроконтроллеры и графические процессоры) или сжатие чисел, где C и Assembler по-прежнему лучший выбор.

Что именно вы можете сделать с Erlang лучше, чем на других языках?

комонада
источник
4
Я не претендовал на то, чтобы изучать его, потому что он был современным; Я просто думаю, что это выглядит интересно, и могут быть вещи, которые вы можете построить с этим, что вы не можете легко с другими языками. Если ваш ответ «Хаскелл - лучший выбор для всех применимых задач», как насчет того, чтобы сказать мне, почему конкретно (вместо того, чтобы просто утверждать это смутно), и ответить на первоначальный вопрос для Хаскелла вместо Эрланга?
Инамати
1
Я не знаю, что этот ответ такой плохой, хотя он не совсем соответствует первоначальному вопросу. Если вы хотите увидеть какой-нибудь прекрасный Haskell в том смысле, о котором говорит команад, посмотрите en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours Это учебное пособие, в котором рассказывается о haskell, библиотеке синтаксического анализа парсек и схеме, написав синтаксический анализатор схем. , Я считаю, что комбинаторы парсеров - одна из самых красивых вещей, с которыми можно играть на функциональных языках. Они тоже немного практичны; если вы знаете, как писать парсеры, вы можете создавать собственные языки для решения конкретных задач.
CodexArcanum
1
«Что именно вы можете сделать с Erlang лучше, чем на других языках?» Я не знаю; вот почему я пытаюсь научиться этому. Моя интуиция говорит мне, что язык, основной конструкцией которого является процесс (в отличие от замыкания, как в CL, лямбда, как в Scheme, или словарь, как в python), может предложить что-то интересное. Haskell также функционален, и у него есть аналогичные конструкции сопоставления с образцом, но не уделяется постоянное внимание параллелизму. На самом деле, основной конструкцией в Хаскеле, похоже, является тип, который заставляет меня думать, что они очень разные животные.
Инамати
2
@CodexArcanum - AFAIK, Erlang и OTP доступны по производной от публичной лицензии Mozilla и бесплатны в репозиториях Debian. Что вы имели в виду под "системой собственности"?
Инамати
1
@comonad - Я имел в виду «Haskell - лучший выбор для всех применимых задач» - «Для каждой задачи, которую я мог бы приемлемо выполнить с Erlang, Haskell может сделать это лучше». Я не хотел подразумевать, что вы можете выполнять всю работу по программированию с одним языком или что я хотел использовать только один язык для всех моих проектов. Вы, кажется, спрашивали «Зачем использовать Erlang, когда вы можете использовать Haskell?», Что подразумевает, что вы думаете, что Haskell напрямую превосходит. Я хотел, чтобы вы разъяснили и, возможно, поддержали это утверждение.
Инамати