Erlang

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Erlang
Erlang logo.png
Парадигма: мультипарадигмна: паралельна, функціональна
Розробник: Ericsson
Останній реліз: 17.0 (9 квітня 2014; 12 днів тому)
Під впливом від: Prolog, SmallTalk
Вплинула на: F#, Clojure, Rust, Scala, Opa, Reia
ОС: Багато-платформова
Ліцензія: модифікована MPL
Сторінка інтернет: www.erlang.org

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

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

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

Назва[ред.ред. код]

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

Особливості[ред.ред. код]

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

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

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

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

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

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

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

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

Розподілена взаємодія[ред.ред. код]

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

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

Див. також[ред.ред. код]

Виноски[ред.ред. код]

Посилання[ред.ред. код]