Erlang
| Семантика: |
мультипарадигмальный: параллельное, функциональное программирование |
|---|---|
| Появился в: | |
| Автор(ы): |
Ericsson Computer Science Laboratory |
| Релиз: | |
| Типизация данных: | |
| Основные реализации: |
Erlang, Erlang HiPE |
Erlang [ˈɜːlæŋ] — ́Эрланг — функциональный язык программирования с динамической типизацией, предназначенный для создания распределённых вычислительных систем. Разработан и поддерживается компанией Ericsson. Язык включает в себя средства порождения параллельных процессов и их коммуникации с помощью асинхронных сообщений и в соответствии с моделью акторов. Программа транслируется в байт-код, исполняемый виртуальной машиной, что обеспечивает переносимость. Кратко формулу языка можно выразить как Erlang=функциональный язык + процессы.
Содержание |
[править] Синтаксис
Синтаксис унаследован от Prolog; компактен, содержит минимум конструкций, лёгок для освоения, но не примитивен. Синтаксис поддерживает модули, полиморфные функции, сопоставление с образцом, анонимные функции, условные конструкции, структуры, обработку исключений, оптимизацию хвостовой рекурсии, что и образует базовый арсенал современных функциональных языков.
Отсутствие присваиваний позволяет Erlang избежать таких традиционных для императивных языков проблем в распределённых приложениях, как необходимость синхронизации, опасность возникновения тупиков и гонок.
[править] Работа с процессами
Отличительной особенностью языка является модель легковесных процессов (аналогично нитям в OpenMP), реализация поощряет создание большого количества таких процессов. Эти процессы изолированы друг от друга и не имеют общего состояния, между процессами можно установить связь и получить сообщение об их состоянии. Для взаимодействия процессов используется асинхронный обмен сообщениями. Процесс имеет свою очередь сообщений, а при её обработке используется сопоставление с образцом.
Отсутствие необходимости блокировки доступа к состоянию процесса для синхронизации их взаимодействия упрощает разработку. Для работы с ресурсами, как правило, создаётся процесс-монитор.
По мнению разработчиков, важным преимуществом языка является принцип работы процесса «let it crash» («пускай падает»). Вместо перехвата ошибок и попытки продолжения работы, часть программы, содержащая рискованный код, выделяется в отдельный «процесс-смертник», который система завершает в случае возникновения ошибки, а процесс-родитель получает соответствующие сообщения и обрабатывает их. Это позволяет избавиться от многочисленных проверок.
[править] Распределённое программирование
Запущенный экземпляр эмулятора Erlang называется узлом (англ. node). Узел имеет имя и «знает» о существовании других узлов на данной машине или в сети. Создание и взаимодействие процессов разных узлов не отличается от взаимодействия процессов внутри узла. Для создания процесса на другом узле процессу достаточно знать его имя и, без особых на то оснований, он может не интересоваться физическим расположением взаимодействующего с ним процесса.
Программы, написанные на Erlang, способны работать на нескольких узлах. Узлами могут быть процессоры, многие ядра одного процессора, либо целый кластер машин. Чем сложнее приложение и чем больше оно создаёт процессов, тем легче его масштабировать; и наоборот, если не используются преимущества функционального программирования, то можно ограничиться единственным процессом.
[править] См. также
- Сравнение возможностей Erlang с другими языками см. в статье сравнение языков программирования.
[править] Примеры проектов, использующих Erlang
- Yaws (Yet Another Web Server) — веб-сервер, написанный на Erlang.
- Ejabberd — свободный (GNU GPL), распределённый и устойчивый к отказам Jabber-сервер, написанный в основном на Erlang.
- Nitrogen — каркас для создания веб-приложений на языке Erlang.
- Chicago Boss — Ruby 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.
[править] Примечания
- ↑ Django templates (en)
- ↑ Testing framework (en)
[править] Ссылки
- http://www.erlang.org/ — open-source реализация (англ.)
- http://www.erlang-projects.org/ — проекты, использующие Erlang в качестве основного языка разработки, REPOS (репозиторий проектов на Эрланге — коллекция библиотек, приложений и утилит) (англ.)
- http://www.trapexit.org/ — форум, вики, решения, учебные пособия, справочные материалы (англ.)
- Erlang по-русски — новости на русском, проект по переводу документации на русский язык (рус.)
- Начала работы с Erlang на RSDN (рус.)
- Erlang Community на Гугле (рус.)
- Planet Erlang Собрание материалов по языку (англ.)
- Несколько вводных статей по Erlang (рус.)
- Онлайн-интерпретатор языка Erlang (англ.)
- Erlang. Знакомство не по правилам, Андрей Зубинский, Компьютерное обозрение (укр.)русск., № 24 (690) от 7 июля 2009
|
|
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • Visual Basic .NET |
| Академические | |
| IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
| Прочие | |
| Эзотерические | |
| Визуального программирования |
|
| Это заготовка статьи о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
| Эту статью следует викифицировать.
Пожалуйста, оформите её согласно правилам оформления статей.
|