Erlang - енциклопедія мов програмування

Erlang (Ерланг) - функціональна мова програмування, що дозволяє писати програми для різного роду розподілених систем. Розроблено і підтримується компанією Ericsson. Мова включає в себе кошти породження паралельних процесів і їх комунікації з допомогою посилки асинхронних повідомлень. Програма транслюється в байт-код, виконуваний віртуальною машиною, що забезпечує переносимість.

Мова динамічний. Синтаксис успадкований від Prolog - компактний, містить мінімум конструкцій, легкий для освоєння, але не примітивний.

До послуг програміста - модулі, поліморфні функції, зіставлення зі зразком, анонімні функції, умовні конструкції, структури, обробка виключень, оптимізація хвостової рекурсії. Загалом базовий арсенал сучасних функціональних мов.

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

Головне в Erlang - його модель легковагих процесів. Перефразовуючи для Erlang слоган поточного дня "Everything is an object" ( "Все є об'єктом»), можна сказати "Everything is a process" ( "Все є процесом»).

Процеси дешеві, створення процесу займає не більше ресурсів, ніж виклик функції. Єдиним способом взаємодії процесів є асинхронний обмін повідомленнями.

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

  • мова стимулює до створення великої кількості конкурентних процесів
  • процеси жорстко ізольовані і не мають загального стану

Процес проектування полягає в итеративном розбитті системи на ієрархії конкурентно взаємодіючих підсистем, поки складові не стануть досить прості для реалізації.

Потужність зв'язки «Процеси + повідомлення" не менше, ніж «Об'єкти + Інтерфейси + Спадкування», але часто призводить до більш компактним і зрозумілим рішенням. Усунення конкуренції також просто як і створення. Відсутність необхідності блокування доступу до стану процесу для синхронізації їх взаємодії сильно полегшує життя. Для конкурентного ресурсу зазвичай просто створюється процес-монітор, через який здійснюється взаємодія з ресурсом.

Другий момент виражається у формулі «let it crash» ( «нехай процес впаде»). Замість перехоплення помилок і спроби продовження роботи частина програми, яка містить ризикований код, виділяється в окремий процес-камікадзе, цей процес робить все можливе, щоб система вбила його в разі виникнення помилки, а процес-батько тільки отримує повідомлення про смерть таких невдалих нащадків і робить висновки.

З огляду на, що зазвичай в 90% подібних ситуацій нічого більш путнього, ніж вивести повідомлення про помилку і спробувати жити з цим болем далі, не представляється можливим, відсутність в коді численних перевірок не так вже непривабливо.

розподілене взаємодія

Запущений екземпляр емулятора Erlang називається вузлом (node). Вузол має ім'я і «знає» про існування інших вузлів на даній машині або в мережі.

Створення та взаємодія процесів різних вузлів не відрізняється від взаємодії процесів всередині вузла. Для створення процесу на іншому вузлі процесу досить знати його ім'я і, без особливих на те підстав, він може не цікавитися фізичним розташуванням взаємодіє з ним процесу.

Елементи синтаксису:

Hello, World !:

Перший рядок задає ім'я модуля і вказує на те, що він повинен знаходитися в файлі prog.erl. Другий рядок експортує 0-арную (не має параметрів) функцію main. Третя описує саму функцію, яка виводить "Hello, World!".

Факторіал:

Використовується рекурсивне визначення факторіала. В Erlang немає вбудованих циклів, тому цикл доводиться симулювати рекурсивної функцією, яка починає з великих значень N, але робить рекурсивний виклик для N-1 до того, як виводить N. loop (_) - гілка, яка задає поведінку функції, якщо її аргумент - не ціла кількість або негативний (необхідна для коректного визначення функції).

Числа Фібоначчі:

Використовується итеративное визначення чисел Фібоначчі, виражене у формі хвостової рекурсії.

Числа Фібоначчі:

Використовується формула Біне. Числа з плаваючою точкою зобов'язані виводитися з як мінімум одним знаком після коми, тому результат роботи виглядає так:

1.0, 1.0, 2.0, 3.0, 5.0, 8.0, 13.0, 21.0, 34.0, 55.0, 89.0, 144.0, 233.0, 377.0, 610.0, 987.0.

Квадратне рівняння:

Схожі статті