Erlang
Erlang – język programowania ogólnego przeznaczenia oraz platforma uruchomieniowa opracowana w latach 1986–1998 w szwedzkim przedsiębiorstwie Ericsson. Jego główne zastosowanie stanowią systemy telekomunikacyjne, a później także rozproszone aplikacje internetowe, systemy czasu rzeczywistego oraz mikroserwisy.
Historia
Projekt Erlanga rozpoczął się w 1986 roku w laboratoriach Ericsson w Szwecji. Jego twórcami byli Joe Armstrong, Robert Virding i Mike Young. Pierwsza wersja języka została wydana w 1992 roku, a w 1998 roku udostępniono go pod licencją open source jako część projektu OTP (Open Telecom Platform).
Założenia i filozofia
- Wysoka dostępność i tolerancja błędów – systemy oparte na Erlangu są w stanie działać nieprzerwanie przez lata.
- Model aktorowy – procesy (aktorzy) komunikują się wyłącznie poprzez wymianę komunikatów, co eliminuje problemy współdzielenia pamięci.
- Immutability danych – struktury danych są niemutowalne, co zwiększa bezpieczeństwo wątkowe.
- „Let it crash” – zamiast obsługiwać wszystkie możliwe wyjątki, procesy są projektowane tak, aby w razie błędu mogły zostać automatycznie zrestartowane przez nadzorujące je procesy (supervisor).
Wirtualna maszyna BEAM
Programy Erlanga są kompilowane do kodu bajtowego, który jest wykonywany na wirtualnej maszynie BEAM. BEAM zapewnia:
- Preemptive scheduling – współbieżne procesy są przełączane co kilka milisekund, co gwarantuje równomierne wykorzystanie CPU.
- Garbage collection per‑process – każda jednostka wykonawcza ma własny zbieracz śmieci, co minimalizuje opóźnienia.
- Wsparcie dla wielordzeniowych architektur – procesy są przydzielane do dostępnych schedulerów.
Kluczowe elementy języka
Składnia
Erlang posiada prostą, deklaratywną składnię inspirowaną Prologiem. Definicje funkcji, wzorce dopasowania i wyrażenia listowe są podstawowymi konstrukcjami.
Typowanie
Język jest dynamicznie typowany, lecz od wersji Erlang/OTP 20 dostępny jest system typów opcjonalnych Dialyzer, który umożliwia statyczną analizę kodu.
Biblioteka standardowa
Standardowa biblioteka OTP dostarcza gotowe komponenty:
- gen_server – generyczny serwer procesowy.
- supervisor – struktura drzewiastej kontroli procesów.
- Mnesia – rozproszona baza danych in‑memory oraz dyskowa.
- ETS (Erlang Term Storage) – szybka pamięć podręczna dla struktur danych.
Zastosowania
Erlang jest wykorzystywany w:
- Infrastrukturze telekomunikacyjnej – AXD‑500, CIXD.
- Systemach wymiany wiadomości – platforma WhatsApp (część backendu).
- Systemach komunikacji w czasie rzeczywistym – serwery RabbitMQ, CouchDB.
- Platformach mikroserwisowych – Elixir (kompilowany do BEAM) oraz aplikacje o architekturze SOA.
Narzędzia i środowiska
Do pracy z Erlangiem najczęściej używa się:
- erl – interaktywna powłoka.
- rebar3 – menedżer pakietów i system budowania.
- eunit – framework testowy.
- dialyzer – statyczna analiza kodu.
- IDE: IntelliJ IDEA z wtyczką Erlang Plugin, Emacs z erlang-mode.
Powiązane języki i technologie
Wynikające z ekosystemu BEAM języki:
- Elixir – język funkcyjny z nowoczesną składnią, współdzielący wirtualną maszynę.
- LFE (Lisp Flavoured Erlang) – dialekt Lispowy.
- Alchemist – projekt umożliwiający integrację z Ruby.
Patenty i publikacje
Podstawowe publikacje opisujące koncepcję Erlanga to:
- “Erlang – A General Purpose Concurrent Language” – J. Armstrong, R. Virding, M. Young, 1990.
- “Design Principles for a Distributed Programming Language” – J. Armstrong, 1995.
Patrzy także
Powiązane artykuły encyklopedyczne: model aktorowy, OTP (Open Telecom Platform), wirtualna maszyna BEAM, Mnesia, Dialyzer, Elixir, Telegram (używa części rozwiązania opartego na Erlangu).