Erlang

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Erlang
Erlang logo.png
Семантика:

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

Появился в:

1987

Автор(ы):

Ericsson Computer Science Laboratory

Релиз:

Erlang/OTP R15B (декабрь 2011)

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

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

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

Erlang, Erlang HiPE

Erlang [ˈɜːlæŋ] — ́Эрланг — функциональный язык программирования с динамической типизацией, предназначенный для создания распределённых вычислительных систем. Разработан и поддерживается компанией Ericsson. Язык включает в себя средства порождения параллельных процессов и их коммуникации с помощью асинхронных сообщений и в соответствии с моделью акторов. Программа транслируется в байт-код, исполняемый виртуальной машиной, что обеспечивает переносимость. Кратко формулу языка можно выразить как Erlang=функциональный язык + процессы.

Содержание

[править] Синтаксис

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

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

[править] Работа с процессами

Отличительной особенностью языка является модель легковесных процессов (аналогично нитям в OpenMP), реализация поощряет создание большого количества таких процессов. Эти процессы изолированы друг от друга и не имеют общего состояния, между процессами можно установить связь и получить сообщение об их состоянии. Для взаимодействия процессов используется асинхронный обмен сообщениями. Процесс имеет свою очередь сообщений, а при её обработке используется сопоставление с образцом.

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

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

[править] Распределённое программирование

Запущенный экземпляр эмулятора Erlang называется узлом (англ. node). Узел имеет имя и «знает» о существовании других узлов на данной машине или в сети. Создание и взаимодействие процессов разных узлов не отличается от взаимодействия процессов внутри узла. Для создания процесса на другом узле процессу достаточно знать его имя и, без особых на то оснований, он может не интересоваться физическим расположением взаимодействующего с ним процесса.

Программы, написанные на Erlang, способны работать на нескольких узлах. Узлами могут быть процессоры, многие ядра одного процессора, либо целый кластер машин. Чем сложнее приложение и чем больше оно создаёт процессов, тем легче его масштабировать; и наоборот, если не используются преимущества функционального программирования, то можно ограничиться единственным процессом.

[править] См. также

[править] Примеры проектов, использующих Erlang

  • Yaws (Yet Another Web Server) — веб-сервер, написанный на Erlang.
  • Ejabberd — свободный (GNU GPL), распределённый и устойчивый к отказам Jabber-сервер, написанный в основном на Erlang.
  • Nitrogen — каркас для создания веб-приложений на языке Erlang.
  • Chicago BossRuby on Rails-подобный фреймворк с поддержкой Django templating language (DTL)[1], «горячей» заменой кода, встроенным SMTP-сервером и развитой системой тестирования[2]. Полностью использует возможности OTP.
  • Disco Project — реализация MapReduce, созданная компанией Nokia. Ядро MapReduce написано на языке Erlang, приложения для MapReduce можно писать на языке Python.
  • CouchDB — документо-ориентированная база данных с REST-интерфейсом.
  • RabbitMQ — Message Oriented Middleware платформа (реализация AMQP) на Erlang.
  • EADC — ADC сервер на Erlang.
  • Zotonic — CMS, написанная на Erlang.

[править] Примечания

[править] Ссылки


Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках