Знайомтеся, erlang
Мова програмування Erlang, перше знайомство.
Чому мова названий Erlang?
На Erlang часто посилаються як Erlang / OTP. Тут OTP розшифровується як Open Telecom Platform (відкрита телекомунікаційна платформа) і являє собою набір бібліотечних модулів, що поставляються з Erlang і підходи до розробки додатків. Переважна більшість додатків з відкритим вихідним кодом, що використовують Erlang, таких як ejabberd, CouchDB і MochiWeb, використовують OTP.
Erlang - це мова програмування загального призначення і так само Виконавча. Хоча Erlang як мову досить привабливий сам по собі, його реальна міць проявляється при з'єднанні з середовищем виконання (віртуальною машиною) і поставляються з мовою бібліотеками. Розглянемо основні особливості Erlang:
Багато комерційних компаній використовують Erlang в своїх проектах, наприклад:
Erlang так само використовується і в проектах з відкритим вихідним кодом, наприклад:
- Ejabberd, сервіс миттєвих повідомлень, що використовує XMPP протокол, написаний на Erlang.
- Erlang використовувався для створення бази даних зберігання документів CouchDB.
Перед початком вивчення Erlang варто переконатися, що він встановлений у вашій операційній системі. Спробуйте набрати в командному рядку команду erl:
Для Windows виклик erl з командного рядка працює тільки, якщо в змінну середовища PATH доданий шлях до програми. У разі стандартної установки для Windows інтерпретатор команд Erlang можна запустити через меню Start> All Programs> Erlang OTP.
Командна оболонка Erlang може використовуватися для інтерактивних сесій і виконання виразів мови. Запустимо оболонку командою erl (або через меню Windows, як описано вище) і наберемо кілька команд:
Розглянемо нашу першу сесію докладніше:
Оболонка є досить потужним інструментом при роботі з Erlang. Крім введення виразів підтримується історія команд (наприклад, комбінації клавіш Ctrl + P і Ctrl + N використовуються для пересування по введеним перш командам), різні можливості редагування команд і безліч допоміжних функцій, які можна подивитися командою help (). Крім цього, оболонка дозволяє приєднуватися до запущеним програмам Erlang, навіть на віддалених вузлах (при цьому так само є можливість автоматичного використання захищеного з'єднання через SSH) і багато іншого.
Треба зауважити, що оболонка дозволяє виконувати тільки вираження Erlang, але її не можна використовувати для введення інших конструкцій мови, які ми будемо розглядати нижче.
Для виходу з оболонки можна використовувати вбудовану функцію halt ():
У разі, якщо оболонка не відповідає (або як інший спосіб нормального виходу), то можна перервати виконання натисканням клавіш Ctrl + C (або Ctrl + Break на Windows), після чого на екран буде виведено:
І тепер для переривання виконання можна натиснути клавішу a.
Після того як ми навчилися працювати в оболонці Erlang, розглянемо основні конструкцій мови.
Як і в багатьох мовах, арифметичні вирази Erlang слідують звичайним правилам для арифметичних виразів, наприклад 1 + 2 * 3 буде обчислено як 1 + (2 * 3).
Цілі числа можуть мати довільний розмір і немає необхідності турбуватися про арифметичні переповнення. Перевіримо це на практиці:
Крім цього цілі можна вводити в різних системах числення, використовуючи наступну форму:
Тут ми ввели число 10 в десятковій, шістнадцятковій і двійковій системах.
Для введення кодів символів можна використовувати нотацію починається з символу $:
Числа з плаваючою точкою можна вводити в наступних форматах:
Для чисел з плаваючою точкою Erlang використовує 64-х бітове представлення, що відповідає стандарту IEEE 754-1985.
Імена змінних в Erlang повинні починатися з великої літери, як в наступному прикладі:
У першому рядку ми присвоюємо значення числа 123456789 змінної X і потім значення виводиться оболонкою. Після цього ми виводимо значення змінної і використовуємо її в арифметичній операції.
Але при цьому значення змінної Erlang може бути присвоєно лише один раз. Продовжуючи наступний приклад:
Що тут відбувається? Строго кажучи, оператор = в Erlang не є оператором присвоювання, а є оператором порівняння з шаблоном. При цьому, якщо змінної в поточній області видимості ще не присвоєно значення, = діє як оператор присвоювання, в іншому випадку = порівнює значення з шаблоном.
При порівнянні з шаблоном спочатку обчислюється права частина виразу, потім вона порівнюється з шаблоном в лівій частині. В останньому прикладі змінна X є найпростішою формою шаблону. В даному випадку порівняння з шаблоном буде успішним тільки в разі, якщо значення правої частини виразу одно 123456789:
Одноразове присвоювання позбавляє розробника від величезного класу помилок пов'язаних з невірним значенням змінної, яка в іншому випадку могла б бути змінена десь між першим привласненням і виразом, в якому вона використовується. Плюс до цього, така поведінка узгоджується з математичної нотації, де неможлива формула виду X = X + 1.
В Erlang атоми використовуються для подання глобальних НЕ-числових констант. При порівнянні з іншими мовами можна уявити атоми, як елементи в перераховувати типі даних. Значним атома є сам атом і єдина операція над атомами - це порівняння.
Атоми повинні починатися з маленької літери (як ми вже розглянули вище, змінні повинні починатися з великої літери, так що вони не перетинаються з атомами), за якою можуть слідувати літери, цифри, # 64; і _ (точка теж може використовуватися в атомах, хоча це є не підтримуваним розробниками розширенням мови). При використанні одинарних лапок ( ') для атома можуть використовуватися практично будь-які символи. Приклади атомів:
Хоча 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. Ось деякі з корисних сайтів:
У наступній статті буде розглянуто послідовне програмування в Erlang