Erlang

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

Erlang
Парадигма мультипарадигмальна: паралельна, функціональна
Дата появи 1987
Творці Джо Армстронг (програміст)
Розробник Ericsson
Останній реліз 23 (13 квітня, 2020 (2020-04-13))
Система типізації динамічна типізація, сильна типізація
Під впливом від Prolog, SmallTalk
Вплинула на F#, Clojure, Rust, Scala, Opa, Reia
Операційна система Багато-платформова
Ліцензія Apache 2.0
Звичайні розширення файлів .erl
Репозиторій вихідного коду github.com/erlang/otp
Вебсайт www.erlang.org
 Erlang у Вікісховищі

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

Програма транслюється в байт-код, що виконується віртуальною машиною, що забезпечує переносність. Одночасно розробниками випускається OTP (Open Telecom Platform) — супутній набір бібліотек і компонентів для розробки розподілених систем на мові Erlang. Код проєкту поширюється під модифікованою вільною ліцензією MPL.

Назва і історія

Серед малообізнаних з історією мови Ерланг поширена думка, що назва «Erlang» розшифровується як ERicsson LANGuage. Насправді мова отримала свою назву на честь Агнера Крарупа Ерланга, данського математика, який працював у галузі телекомунікацій. Існує одиниця вимірювання телекомунікаційного трафіку, яка також називається Erlang.[1]

Мова Erlang була створена в 1986 році в лабораторії компанії Ericsson спільно Джо Армстронгом (Joe Armstrong), Робертом Вірдінгом (Robert Virding) і Майком Вільямсом (Mike Williams), і в 1998 році переведена в розряд відкритих проєктів. Завдяки початковій орієнтації на створення застосунків для паралельної обробки запитів в режимі реального часу мова набула поширення в таких областях як телекомунікації, банківські системи, електронна комерція, комп'ютерна телефонія і організація миттєвого обміну повідомленнями.

Особливості

Синтакс успадкований від Prolog.

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

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

Процес може встановити зв'язок (link) з іншими процесами і за вибором або отримувати повідомлення про їхнє дострокове завершення з вказанням причини або розділити їхню долю. Процес має свою «поштову скриню», звідки може вибірково читати повідомлення.

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

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

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

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

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

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

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

Див. також

Виноски

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.