Знакомьтесь, erlang

Знакомьтесь, erlang

Dmitry Vasiliev 23:14, 2012 2 6 12:56, 2009 10 22

В первый раз было размещено в издании Системный администратор #8 за 2009 год

Язык программирования Erlang, первое знакомство.

Главные изюминки Erlang

Из-за чего язык назван Erlang?

Один из авторов языка Джо Армстронг (Joe Armstrong) говорит, что имеется две версии происхождения заглавия. По одной версии наименование языка расшифровывается как «Ericsson Language» (язык Ericsson). По второй — язык назван в честь датского математика Агнера Крарупа Ерланга (Agner Krarup Erlang).

И также авторам нравится поддерживать такое неоднозначное толкование заглавия.

Что такое OTP?

На Erlang довольно часто ссылаются как Erlang/OTP. Тут OTP расшифровывается как Open Telecom Platform (открытая телекоммуникационная платформа) и является набором библиотечных модулей, поставляемых с Erlang и подходы к разработке приложений. Большинство приложений с открытым исходным кодом, применяющих Erlang, таких как ejabberd, CouchDB и MochiWeb, применяют OTP.

Erlang — это язык программирования неспециализированного назначения и без того же среда исполнения. Не смотря на то, что Erlang как язык достаточно привлекателен сам по себе, его настоящая мощь проявляется при соединении со средой исполнения (виртуальной машиной) и поставляемыми с языком библиотеками. Разглядим главные изюминки Erlang:

  • Высокоуровневые конструкции языка. Erlang — это декларативный язык программирования, разрешающий обрисовывать, что должно быть вычислено, вместо описания того, как это должно быть вычислено. Erlang так же применяет динамическую типизацию, что может ускорить разработку приложений.
  • передача сообщений и Параллельная обработка. Вместо применения распространенной на данный момент модели параллельного программирования, в которой употребляются потоки с разделяемой памятью, Erlang поддерживает параллельную модель, основанную на легковесных процессах с асинхронной передачей сообщений. Процессы в Erlang не имеют ничего общего с процессами ОС и именуются процессами лишь вследствие того что код каждого процесса выполняется независимо от вторых процессов. Наряду с этим процессы Erlang за счет собственной легковесности (время создания процесса образовывает пара микросекунд и не зависит от количества уже трудящихся процессов) трудятся кроме того действеннее, чем потоки ОС, что разрешает трудиться с несколькими десятками тысяч процессов в одном приложении. Процессы общаются между собой при помощи передачи сообщений (время передачи сообщения образовывает пара микросекунд так, как эти из пространства одного процесса в пространство другого в рамках виртуальной автомобили), где сообщением возможно любое значение, применяемое в языке. Сообщения передаются асинхронно, так, сразу после посылки сообщения отправитель может продолжить работу. Входящие сообщения извлекаются из «почтового коробки» процесса выборочно и, так, нет необходимости извлекать сообщения попеременно.
  • Распределенная обработка. Так как процессы в Erlang не применяют разделяемой памяти, а общаются лишь при помощи передачи сообщений, язык разрешает достаточно легко перевоплотить параллельное приложение в распределенное, где разные процессы выполняются на разных узлах сети.
  • Надежность. Erlang поддерживает разные подходы для построения высоконадежных совокупностей. На низком уровне процессы смогут быть связаны между собой и оповещаться при помощи сообщений при завершении связанного процесса. На более большом уровне, при применении OTP (см. врезку), появляется возможность устанавливать разные политики мониторинга отдельных групп и процессов процессов. В распределенной совокупности резервные узлы смогут машинально заменять узлы вышедшие из строя.
  • Работа в режиме мягкого настоящего времени (soft real-time). Не смотря на то, что Erlang — это высокоуровневый язык, его возможно применять для совокупностей трудящихся в режиме мягкого настоящего времени (в то время, когда нарушение временных ограничений приводит лишь к понижению качества работы совокупности). Язык применяет автоматическое управление памятью, при котором «сборка мусора» происходит раздельно для каждого процесса в совокупности. Это разрешает приобретать ответы совокупности в пределах нескольких микросекунд кроме того при наличии «сборки мусора», что, со своей стороны, разрешает трудиться в режиме высокой нагрузки фактически без утраты пропускной свойстве.
  • Работа приложений в течение продолжительного времени. Язык поддерживает «тёплую» замену кода модулей в трудящемся приложении, при котором одновременно времени смогут трудиться ветхая и новая версии кода. Это нужно для совокупностей, каковые просто не должны останавливаться для обновления кода, к примеру, телефонных совокупностей, либо совокупностей контроля трафика.

Проекты, в которых употребляется Erlang

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

  • Amazon применял Erlang для SimpleDB, которая предоставляет сервис хранения данных для Amazon Elastic Compute Cloud (EC2).
  • Erlang употреблялся при создании Delicious, сервиса социальных закладок от Яху. в котором зарегистрировано больше чем 5 миллионов пользователей и больше чем 150 миллионов закладок.
  • Facebook применял Erlang для сервиса чата, обрабатывающего больше чем 100 миллионов активных пользователей.

Erlang так же употребляется и в проектах с открытым исходным кодом, к примеру:

  • Ejabberd, сервис мгновенных сообщений, применяющий XMPP протокол, написан на Erlang.
  • Erlang употреблялся для базы данных хранения документов CouchDB.

Начинаем трудиться

Перед началом изучения Erlang стоит убедиться, что он установлен в вашей ОС. Попытайтесь собрать в командной строчке команду erl:

Для Windows вызов erl из командной строчка трудится лишь, в случае если в переменную среды PATH добавлен путь к программе. При стандартной установки для Windows интерпретатор команд Erlang возможно запустить через меню Start All Programs Erlang OTP.

В случае если Erlang установлен в вашей совокупности, то вы заметите приветствие похожее на пример выше. , если при вызове erl вы взяли сообщение о малоизвестной команде, вам необходимо установить Erlang. Для большинства совокупностей Erlang возможно установлен с применением стандартной совокупности управления пакетами.

Для Windows инсталлятор возможно скачан с сайта: http://erlang.org/download.html. В других совокупностях возможно собрать Erlang с применением исходного кода, что так же возможно скачать с сайта: http://erlang.org/download.html .

Командная оболочка

Командная оболочка Erlang может употребляться для выполнения выражений и интерактивных сессий языка. Запустим оболочку командой erl (либо через меню Windows, как обрисовано выше) и соберём пара команд:

Разглядим отечественную первую сессию подробнее:

  • При старте командой erl оболочка выводит заголовок с информацией о версии и опциях с которыми собран Erlang.
  • Затем выводится приглашение для ввода команд 1. По окончании первого приглашения мы собрали комментарий. Комментарии в Erlang начинаются со символа % и длятся до конца строчка. Оболочка игнорирует комментарии.
  • После этого оболочка снова выводит 1 так как мы не собрали законченной команды. Сейчас мы набираем 2 + 2, после этого точку и нажимаем Ввод. Многие начинающие изучать Erlang забывают собрать точку в конце выражения, но в этом случае оболочка не сможет выяснить, что выражение закончено, и итог не будет выведен.
  • Сейчас оболочка вычисляет выражение и выводит итог (4, в нашем случае).
  • Затем оболочка выводит приглашение в виде 2. Где, 2 — это номер команды, что возрастает с каждой выполненной командой.

Оболочка есть достаточно замечательным инструментом при работе с Erlang. Не считая ввода выражений поддерживается история команд (к примеру, комбинации клавиш Ctrl+P и Ctrl+N употребляются для передвижения по введенным прежде командам), множество и редактирования различные возможности

команд запасных функций, каковые возможно взглянуть командой help(). Также, оболочка разрешает присоединяться к запущенным программам Erlang, кроме того на удаленных узлах (наряду с этим так же имеется возможность автоматического применения защищенного соединения через SSH) и другое.

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

Для выхода из оболочки возможно применять встроенную функцию halt():

, если оболочка не отвечает (либо как второй метод обычного выхода), то возможно прервать исполнение нажатием клавиш Ctrl+C (либо Ctrl+Break на Windows), по окончании чего на экран будет выведено:

И сейчас для прерывания исполнения возможно надавить клавишу a.

Базисные понятия

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

Как и во многих языках, арифметические выражения Erlang следуют простым правилам для арифметических выражений, к примеру 1 + 2 * 3 будет вычислено как 1 + (2 * 3).

Целые числа смогут иметь произвольный размер и нет необходимости тревожиться об арифметических переполнениях. Удостоверимся в надежности это на практике:

Для ввода кодов знаков возможно применять нотацию начинающуюся с знака $:

Числа с плавающей точкой возможно вводить в следующих форматах:

Для чисел с плавающей точкой Erlang применяет 64-х битное представление, соответствующее стандарту IEEE 754-1985.

Имена переменных в Erlang должны начинаться с громадной буквы, как в следующем примере:

В первой строке мы присваиваем значение числа 123456789 переменной X и после этого значение выводится оболочкой. Затем мы выводим значение переменной и используем ее в арифметической операции.

Но наряду с этим значение переменной Erlang возможно присвоено лишь один раз. Продолжая следующий пример:

Что тут происходит? Строго говоря, оператор = в Erlang не есть оператором присваивания, а есть оператором сравнения с шаблоном. Наряду с этим, в случае если переменной в текущей области видимости еще не присвоено значение, = действует как оператор присваивания, в другом случае = сравнивает значение с шаблоном.

При сравнении с шаблоном сперва вычисляется правая часть выражения, после этого она сравнивается с шаблоном в левой части. В последнем примере переменная X есть несложной формой шаблона. В этом случае сравнение с шаблоном будет успешным лишь , если значение правой части выражения равняется 123456789:

Одноразовое присваивание избавляет разработчика от огромного класса неточностей связанных с неверным значением переменной, которая в другом случае имела возможность бы быть поменяна где-то между выражением и первым присваиванием, в котором она употребляется. Плюс к этому, такое поведение согласовывается с математической нотацией, где неосуществима формула вида X = X + 1.

В Erlang атомы употребляются для представления глобальных не-числовых констант. При сравнении с другими языками возможно представить атомы, как элементы в перечисляемом типе данных. Значением атома есть единственная операция и сам атом над атомами — это сравнение.

Атомы должны начинаться с маленькой буквы (как мы уже разглядели выше, переменные должны начинаться с громадной буквы, так что они не пересекаются с атомами), за которой смогут направляться буквы, цифры, @ и _ (точка также может употребляться в атомах, не смотря на то, что это есть не поддерживаемым разработчиками расширением языка). При применении одинарных кавычек (‘) для атома смогут употребляться фактически каждые знаки. Примеры атомов:

Не смотря на то, что Erlang не имеет отдельного булевского типа, по соглашению для этого употребляются атомы true и failse:

Увидьте, что во второй строке мы сравнили два атома, при сравнении которых употребляется лексикографический порядок. Начиная с третьей строки, мы применили встроенную функцию (Built-in function, BIF) is_boolean, которая возвращает true, либо false в зависимости от типа довода.

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

По соглашению, в случае если первый элемент кортежа атом, его именуют меткой, не смотря на то, что это никак не отличает таковой кортеж от вторых кортежей. С применением таких меток возможно создавать личные типы данных, к примеру:

Такие метки упрощают извлечение информации из кортежа с применением операции сравнения с шаблоном:

Тут — это более сложный шаблон, чем тот, что мы применяли выше, присваивающий переменным X и Y значения 10 и 20 соответственно. В строке 4 мы применяли неизвестную переменную (_), которой не присваивается значение и ее возможно пара раз применять в шаблоне. В строке 6, при попытке применения шаблона. мы взяли неточность, поскольку шаблон не сходится с кортежем в правой части выражения.

Также, с применением встроенных функций имеется возможность трудиться с отдельными элементами кортежей, к примеру, приобретать элементы по индексу (начиная с 1):

Перечни как и кортежи — это составной тип данных, что может содержать каждые типы данных Erlang, но в отличие от кортежей перечни обрабатываются совсем вторым методом и помогают для хранения данных, количество которых изменяется. Перечни создаются с применением квадратных скобок, и их элементы разделяются запятыми, к примеру:

Первый элемент перечня (в отечественном примере — это 1) именуется вершиной перечня, а оставшиеся элементы — хвостом перечня. При обработке перечней самая эффективная операция — это работа с вершиной перечня, которая поддерживается в Erlang следующей конструкцией: [вершина | хвост]. Тут вершина — это элемент, либо комплект элементов для добавления, либо удаления из перечня, а хвост — перечень для добавления элементов, либо перечень по окончании удаления вершины. Разглядим это на примерах:

Тут мы создали перечень List, после этого добавили в качестве его вершины два элемента, организовав новый перечень Range. Затем мы отделили один элемент из вершины перечня, сохранив его как Head.

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

Из следующих примеров возможно заметить, что строки и перечни целых — это одно и также:

Тут =:= сравнивает два элемента.

Для действенного хранения двоичных разрешённых рекомендуется использовать двоичный тип данных. Двоичный тип данных складывается из комплекта целых в диапазоне от 0 до 255 (либо соответствующих знаков) и представляется посредством двух угловых скобок:

Заключение

В данной статье были коротко рассмотрены базовые понятия и основные особенности языка программирования Erlang. Более детальная информация по языку возможно отыскана в документации, находящейся на официальном и других сайте , обрисовывающих Erlang. Вот кое-какие из нужных сайтов:

  • http://erlang.org/ — главный сайт языка, где неизменно возможно скачать последнюю версию дистрибутива, прочесть новости и документацию;
  • http://www.planeterlang.org/ — агрегатор блогов по Erlang;
  • http://trapexit.org/ — сборник статей, новостей и блогов по Erlang;
  • http://erlang.dmitriid.com/ — русскоязычный сайт с форумом и новостями по Erlang;

В следующей статье будет рассмотрено последовательное программирование в Erlang

Источник: hlabs.org

Erlang The Movie II: The Sequel

Важное на сайте:

Самые интересные результаты статей, подобранные именно по Вашим интересам: