Эрланг (язык программирования)

Эрланг (язык программирования)
Erlang
Файл:Erlang logo.png
Семантика:

мультипарадигмальный: конкурентное, функциональное программирование

Появился в:

1987 г.

Автор(ы):

Типизация данных:

строгая, динамическая

Основные реализации:

Erlang, Erlang HiPE

Erlang (Эрла́нг) — функциональный язык программирования, позволяющий писать программы для разного рода распределённых систем. Разработан и поддерживается компанией байт-код, исполняемый виртуальной машиной, что обеспечивает переносимость.

Кратко формулу языка можно выразить как Erlang=функциональный язык+процессы.

Язык динамический. Синтаксис наследован от Prolog. Компактен, содержит минимум конструкций, лёгок для освоения, но не примитивен.

К услугам программиста — модули, полиморфные функции, сопоставление с образцом, анонимные функции, условные конструкции, структуры, обработка исключений, оптимизация хвостовой рекурсии. В общем, базовый арсенал современных функциональных языков.

Функциональная парадигма (отсутствие присваиваний) позволяет Erlang избежать таких традиционных для императивных языков проблем распределённых приложений, как необходимость синхронизации, опасность возникновения тупиков и гонок.

Главное в Erlang — его модель легковесных процессов. Перефразируя для Erlang слоган текущего дня «Everything is an object» («Всё является объектом»), можно сказать «Everything is a process» («Всё является процессом»).

Процессы дёшевы, создание процесса занимает не больше ресурсов, чем вызов функции. Единственным способом взаимодействия процессов является асинхронный обмен сообщениями.

При желании процесс может установить связь (link) с другими процессами и по выбору или получить сообщение о их смерти с указанием причины или разделить их участь.

Процесс имеет свой «почтовый ящик», откуда может выборочно читать сообщения, в чём очень помогает сопоставление по шаблону, код проверки «ящика» чем-то похож на программу на awk, нужное выгребается и обрабатывается, остальное остаётся или выбрасывается.

На разработку программ накладывают сильный отпечаток два момента:

  • Язык стимулирует к созданию большого количества конкурентных процессов.
  • Процессы жёстко изолированы и не имеют общего состояния.

Процесс проектирования заключается в итеративном разбиении системы на иерархии конкурентно взаимодействующих подсистем, пока составляющие не станут достаточно просты для реализации.

Мощность связки «Процессы+сообщения» не меньше, чем «Объекты+Интерфейсы+Наследование», но зачастую приводит к более компактным и понятным решениям. Устранение конкуренции так же просто, как и создание. Отсутствие необходимости блокировки доступа к состоянию процесса для синхронизации их взаимодействия сильно облегчает жизнь. Для конкурентного ресурса обычно просто создаётся процесс-монитор, через который осуществляется взаимодействие с ресурсом.

Важный принцип работы процесса формулируется как «let it crash» («пусть процесс упадет»). Вместо перехвата ошибок и попытки продолжения работы, часть программы, содержащая рискованный код, выделяется в отдельный «процесс-смертник», и этот процесс делает всё возможное, чтобы система убила его в случае возникновения ошибки, а процесс-родитель готов получать сообщения о смерти таких подпроцессов и обрабатывать их. Этот принцип приводит к тому, что код избавляется от многочисленных проверок, которые ранее приводили к невразумительным сообщениям об ошибке, труднопонятным пользователю. Разработчики считают этот принцип преимуществом языка.

Содержание

Распределённое взаимодействие

Запущенный экземпляр эмулятора Erlang называется узлом (node). Узел имеет имя и «знает» о существовании других узлов на данной машине или в сети.

Создание и взаимодействие процессов разных узлов не отличается от взаимодействия процессов внутри узла. Для создания процесса на другом узле процессу достаточно знать его имя и, без особых на то оснований, он может не интересоваться физическим расположением взаимодействующего с ним процесса.

Распределённое программирование

Программы написанные на Erlang способны работать на нескольких узлах. Узлами могут быть процессоры, многие ядра одного процессора либо целый кластер машин.

Достигается это за счет того, что хорошо написанная программа создает большое количество легких процессов.

Один процесс на много потоков не разбить, а если у вас сотни процессов? Какая вам теперь разница, одно ли у вас ядро в компьютере или их там сотня? То есть, теперь, чем сложнее ваше приложение и чем больше оно создает процессов, тем оно масштабируемей.

И наоборот, если вы не используете преимущества функционального программирования, то всегда сумеете довести программу до того, что она сможет работать только в один поток.

Erlang и ООП

Человек который привык к Си-подобным языкам, иногда не понимает, что создание отдельного процесса с возможностью обмениваться с ним сообщениями, равнозначно созданию экземпляра класса.

Да, принцип сильно отличается от привычных разновидностей ООП, но результат как минимум не уступает в своей эффективности.


См. также

  • Сравнение возможностей Erlang с другими языками см. в статье Сравнение языков программирования
  • веб-сервер написанный на Erlang’е
  • Nitrogen — каркас для создания веб-приложений на языке Erlang.
  • Disco — это реализация Nokia. Ее ядро написано на языке Erlang и приложения для нее можно писать на языке Python.
  • Apache CouchDB - документоориентированная база данных с

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Эрланг (язык программирования)" в других словарях:

  • Эрланг (значения) — Эрланг, Агнер Краруп  датский математик. Эрланг  единица интенсивности нагрузки (чаще всего в телекоммуникационных сетях). Распределение Эрланга (поток)  статистическое распределение вероятностей. Erlang  функциональный язык… …   Википедия

  • Эрланг, Агнер — Агнер Краруп Эрланг Датский математик, статистик, инженер Дата рождения: 1 января 1878 Место рождения: Лонгборг, Дания Дата смерти: 3 февраля 1929 Научная сфера: Теория массового обслуживания Агнер К …   Википедия

  • Эрланг Агнер Краруп — Агнер Краруп Эрланг Датский математик, статистик, инженер Дата рождения: 1 января 1878 Место рождения: Лонгборг, Дания Дата смерти: 3 февраля 1929 Научная сфера: Теория массового обслуживания Агнер К …   Википедия

  • Автоматное программирование — Автоматное программирование  это парадигма программирования, при использовании которой программа или её фрагмент осмысливается как модель какого либо формального автомата. В зависимости от конкретной задачи в автоматном программировании… …   Википедия

  • Erlang — У этого термина существуют и другие значения, см. Эрланг (значения). Erlang Семантика …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»