Erlang
Erlang (Ерла́нґ) — мова функційного програмування з динамічною типізацією, призначена для розробки програм для різного роду розподілених і багатониткових систем. Розроблена і підтримується компанією Ericsson. Мова містить в собі засоби породження паралельних процесів та їхньої взаємодії за допомогою посилання асинхроних повідомлень, без використання блокувань.
Erlang | |
---|---|
Парадигма | мультипарадигмальна: паралельна, функціональна |
Дата появи | 1987 |
Творці | Джо Армстронг (програміст) |
Розробник | Ericsson |
Останній реліз | 23 (13 квітня, 2020 ) |
Система типізації | динамічна типізація, сильна типізація |
Під впливом від | 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). Вузол має ім'я і «знає» про існування інших вузлів на цій машині або у мережі.
Створення та взаємодія процесів різних вузлів не відрізняється від взаємодії процесів всередині вузла. Для створення процесу на іншому вузлі процесу досить знати його ім'я.
Див. також
Виноски
- Начала работы с Erlang (рос.)
Посилання
- http://www.erlang.org/ — реалізація з відкритими вихідними текстами
- http://groups.google.com/group/erlang-in-ukraine — група україномовної Erlang-спільноти
- https://archive.today/20030224125715/http://www.erlang-projects.org/ — репозиторій проєктів на Erlang
- https://web.archive.org/web/20111026040038/http://cean.process-one.net/ — Comprehensive Erlang Archive Network, репозиторій проєктів на Erlang
- https://web.archive.org/web/20130806160118/http://www.trapexit.org/ — форум, вікі, рішення, підручники, довідкові матеріали
- http://erlide.sourceforge.net/ — плагін для середовища розробки Eclipse з підтримкою мови Erlang
- http://www.learnyousomeerlang.com - англомовний онлайн-підручник з програмування мовою Erlang
- 2007. Programming Erlang: Software for a Concurrent World. Pragmatic Bookshelf ISBN 978-1934356005.
- 2013. Programming Erlang: Software for a Concurrent World. Second edition. Pragmatic Bookshelf ISBN 978-1937785536.