Erlang
├── Database Worker
gen_statem
* висока доступність; * обробка великої кількості одночасних з’єднань; * відмовостійкість; * гаряче актуалізація коду; * розподілена робота; * ізоляція помилок; Це надає можливість явно обробляти успіх і помилку.; * '''Common Test''' — framework для більших test suites.; Станом на травень 2026 року офіційна сторінка Downloads вказує '''Erlang/OTP 28.5''' як latest version of Erlang/OTP.; * '''Message passing''' — передача повідомлень між processes.; Common Test часто застосовується в серйозних Erlang/OTP проєктах.; Для production persistence потрібно обережно оцінювати, чи DETS справді підходить.; # Обережно використовувати NIFs.; status_text(cancelled) -> "Скасовано".;
Історично string в Erlang — це list of integers.; * Distributed Erlang — взаємодія Erlang nodes у distributed system.; Це одна з причин, чому Erlang добре підходить для систем із багатьма одночасними процесами.; Для fault-tolerant систем істотно тестувати не тільки “happy path”, а й падіння processes, timeouts, повтори й network issues.; Erlang не є собою ERP-системою.; Змінні в Erlang присвоюються один раз.; Erlang доречний тоді, коли його fault-tolerance модель справді потрібна.;== Типові помилки в Erlang ==
Обмеження:
== Mnesia == Приклад сценарію: ├── Session Worker 2 == Soft real-time == Не можна випадково публікувати Erlang cookie в репозиторії або logs.; Fault tolerance — здатність системи продовжувати роботу після часткових помилок.;
- менший ринковий сегмент розробників;
- незвичний синтаксис;
- менша mainstream web ecosystem;
- не найкращий вибір для CPU-heavy задач;
- distributed systems усе одно складні;
- потрібна дисципліна OTP architecture;
- NIFs можуть зламати fault tolerance;
- observability і backpressure потрібно проектувати.; з цієї причини часто говорять не без ускладнень Erlang, а Erlang/OTP.; User = #{id => 1, name => <<"Anna">>, active => true}.; └── Session Worker 3
== Binaries == Кожен process: * messaging; * telecom sessions; * chat; * presence; * notification systems; * control planes.;== Rebar3 == Приклад ідеї: '''BEAM''' — virtual machine, на якій виконується Erlang-код.; # Моніторити BEAM runtime metrics.; Data = <<"hello">>.; ETS — in-memory tables для зберігання Erlang terms.;== Erlang і Web ==
Головна сила OTP: ви не без ускладнень пишете процеси.;
Applications
Приклад:
- Cowboy;
- Ranch;
- Elli;
- Webmachine historically;
- Zotonic;
- ChicagoBoss historically.; Це дає гнучкість, але має змогу створити проблему, якщо mailbox росте швидше, ніж process обробляє повідомлення.; add_test() ->
Сьогодні Erlang застосовують, коли потрібно не тільки в telecom, а й у messaging systems, real-time backend, distributed systems, IoT, фінансових системах, chat-серверах, брокерах повідомлень і high-availability інфраструктурі.; Supervisor має змогу перезапускати child process, якщо той падає.; Приклад:
- observer;
- recon;
- telemetry;
- OpenTelemetry;
- logs;
- custom metrics;
- VM statistics.; У контексті K2 ERP Erlang має змогу бути корисним опосередковано:
- потрібен простий CRUD;
- команда не знає Erlang/OTP;
- потрібен великий ринковий сегмент розробників;
- потрібен CPU-heavy numerical code;
- потрібна AI/data science ecosystem;
- потрібен mobile app;
- потрібен modern mainstream web stack;
- fault tolerance не є собою важливою вимогою;
- платформа без зайвих зусиль вирішується Go/C#/Java/Python;
- немає плану observability і OTP architecture.; Але основну бізнес-логіку ERP зазвичай варто писати в основному стеку системи.; Property-based testing перевіряє не один приклад, а властивості програми на багатьох generated inputs.; example:hello/0
істотно: NIF — це місце, де Erlang має змогу втратити частину своєї fault tolerance.; Erlang processes спілкуються через messages.; |- | Erlang || fault-tolerant distributed runtime, processes, message passing, OTP |- | Haskell || чисті функції, сильна type system, lazy evaluation, математичне моделювання |}
Вона підтримує роботу:
Це основа для supervisor-like behaviour і fault detection.; * type discrepancies;
- unreachable code;
- pattern matching issues;
- potential bugs.;
WhatsApp історично часто згадується як приклад системи, яка використовувала Erlang для масштабної messaging infrastructure.; {hello, "Erlang"}.;
Коли Erlang має змогу бути невдалим вибором
call комфортно використовувати, коли потрібна відповідь.; Але для сучасної роботи з текстом і network data часто використовують binaries:
Mnesia має змогу бути доречною для: Потрібно думати про:
id,
status_text(draft) -> "Чернетка";
Pid = spawn(fun() ->
Pid !; Сильні сторони:
Pattern matching — центральна частина Erlang.; Let it crash — філософія Erlang.;
{{SEO
'''Arity''' — кількість аргументів функції.; * '''Binary''' — binary data у Erlang.; BEAM — одна з головних причин, чому Erlang добре підходить для high-concurrency systems.; {hello, Name} ->
Erlang підтримує роботу typespecs.;<pre>
<pre>
'''Mnesia''' — distributed database management system, що входить в OTP.; Головна ідея Erlang — будувати системи з багатьох легких ізольованих процесів, які спілкуються повідомленнями.; # Стежити за mailbox length.; # Не створювати atoms із user input.; '''Behaviour''' — OTP-шаблон для типових процесів.; У багатьох сучасних deployment-процесах замість hot upgrade використовують rolling deploy або blue-green deploy, але сама можливість залишається важливою частиною Erlang-історії.; * '''gen_server''' — generic server behaviour.; Erlang web stack менш mainstream, ніж Node.js, Python, Go, Java або C#, але сильний у concurrent connection handling.; Порівняння:
2> self().;<div style="background:#fff0f0;border-left:6px solid #eb5757;padding:14px 18px;margin:16px 0;border-radius:8px;">
== Erlang shell ==
Порівняння:
* Erlang runtime;
* applications;
* configuration;
* boot scripts;
* release metadata;
* versioning;
* upgrade instructions.; '''Monitor''' надає можливість одному process спостерігати за іншим без взаємного зв’язку.; 5
hello(Name) ->
У gen_server є собою два типові способи взаємодії:
|-
| '''Erlang''' || оригінальна мова OTP, telecom roots, дуже стабільна
|-
| '''Elixir''' || сучасніший синтаксис, Mix tooling, Phoenix web framework, ширша популярність у web
|}
Numbers = [1, 2, 3, 4].; # Проектувати supervision tree з самого початку.;
ETS — Erlang Term Storage.; Для high-concurrency I/O systems — часто дуже сильний.; Erlang/OTP 28 був випущений 21 травня 2025 року як новий major release з новими можливостями, покращеннями й деякими несумісностями.; Supervisors мають restart strategies.;== Hex.pm ==
sum([H | T], Acc) -> Але hot upgrades складні:- крапки в кінці function definitions;
- коми між expressions;
- крапку з комою між clauses;
- atoms;
- pattern matching;
- single assignment.;
- real-time notification service;
- high-availability gateway;
- concurrent session service;
- IoT/telemetry ingestion;
- distributed background processing;
- fault-tolerant integration layer;
- service, де важлива supervision і self-healing.;
Haskell сильніший у type-driven correctness і pure functional modeling.;[1]
rebar3 ct
Замість того щоб боятися кожної помилки, Erlang пропонує підхід:
- supervisors;
- gen_server;
- gen_statem;
- applications;
- releases;
- logging;
- distributed tools;
- release handling;
- debugging tools;
- стандартні design patterns.; * protocols;
- parsers;
- state machines;
- business rules;
- serialization;
- distributed logic.; # Використовувати gen_statem для state machines.;== Erlang і API ==
Він застосовується для процесів, які мають state і обробляють requests/messages.; -spec add(integer(), integer()) -> integer().; Сильні сторони
- підтримку;
- ліцензію;
- сумісність з OTP;
- активність;
- транзитивні залежності;
- security issues.; Помилка в native code має змогу вплинути на всю VM, а не лише на один Erlang process.; * ETS — in-memory storage для Erlang terms.;
Application Supervisor
Erlang найкраще використовувати там, де головна вимога — не без ускладнень виконати код, а побудувати систему, яка продовжує працювати під навантаженням, при помилках і в distributed environment.;Erlang syntax має змогу здаватися незвичним через:
Але fault tolerance не виникає автономно.;== BEAM VM ==
інформаційні дані в Erlang immutable.;[2] Module має ім’я й список exported functions.; Ви описуєте, хто за ким стежить, що робити після падіння, як перезапускати частини системи й де проходять межі відмови.;== Mailbox == Pattern matching робить обробку повідомлень і структур дуже природною.; * Dialyzer — static analysis tool для Erlang.; Якщо cookies не збігаються, nodes не з’єднаються.;== supervisor ==
Erlang і ERP-системи
X = 10, <div style="background:#fff7e6;border-left:6px solid #f2994a;padding:14px 18px;margin:16px 0;border-radius:8px;"> Без backpressure можливі: == Performance == Erlang nodes використовують cookie для автентифікації між nodes.; Приклад: status_text(paid) -> "Оплачено";
Типові стратегії:
- memory growth;
- latency;
- process overload;
- node instability.; Tuple — фіксована структура.; Офіційна документація supervisor behavior описує supervisor як process, що supervises child processes; child process має змогу бути іншим supervisor або worker process, зазвичай реалізованим через gen_server, gen_statem або gen_event.;
Дивіться додатково
OTP application — логічна одиниця Erlang-системи.; * Supervisor — process, що контролює child processes.; Це компонент системи.; * Hex.pm — package ecosystem для Erlang/Elixir.; OTP application — не обов’язково “додаток” у звичному UI-сенсі.;
- concurrency;
- fault tolerance;
- process isolation;
- distributed behaviour;
- message-oriented architecture.; * EUnit — unit testing framework.; Треба розуміти різницю між lists і binaries, бо вона впливає на performance і APIs.; !; * Tuple — фіксована структура значень.;
Ports і NIFs
sum(List, 0).; Для production потрібні network isolation, firewall, secrets management і TLS, якщо доречно.; Приклад: Приклад: '''Коротко:''' Erlang — це мова й платформа для систем, які мають не без ускладнень “працювати”, а продовжувати працювати навіть тоді, коли окремі частини падають.; '''Link''' створює двосторонній зв’язок: якщо один process падає, сигнал отримує інший.;
Приклад модуля:
Erlang у backend
error NIF — Native Implemented Function, код на C/C++, який викликається всередині BEAM.; "hello"
- перезапустити тільки process, що впав;
- перезапустити всіх;
- перезапустити process і тих, хто залежить від нього.; Приклад:
Distributed Erlang
Links і monitors
Хороші практики
Поширені помилки:
* BEAM VM;
* lightweight processes;
* message passing;
* actor model;
* OTP;
* supervisors;
* supervision trees;
* gen_server;
* gen_statem;
* fault tolerance;
* distributed Erlang;
* hot code loading;
* telecom heritage;
* soft real-time systems;
* RabbitMQ-like workloads.;== Пояснення термінів ==
rebar3 release
Erlang має змогу взаємодіяти з зовнішнім кодом через ports і NIFs.; module:function/arity
Rebar3 — стандартний вибір для багатьох Erlang-проєктів.; Він застосовується для:
Це істотно для telecom і high-availability systems.; У OTP 28 з’явилися priority messages.; Приклад:
Приклад:
Він знаходить:
* processes;
* applications;
* memory;
* scheduler info;
* ETS tables;
* supervision trees.; Поведінка runtime, libraries і tooling має змогу залежати від OTP-релізу.; {ok, Result}
[[Категорія:Backend]]
[[Категорія:Тестування]]
Типові команди:
Для довгих циклів важлива tail recursion.;== Observability ==
Це сприяє ізолювати паузи: GC одного process не мусить зупиняти всю VM.;<pre>
Це один із найвідоміших прикладів практичного використання Erlang/OTP.; Records — старіший спосіб описати structured data.;== Strings ==
Behaviour визначає callback functions, які module має реалізувати.; Erlang дає інструменти, але архітектурні проблеми distributed systems залишаються.; Якщо message не підходить під pattern, він залишається в mailbox.;<pre>
* network partitions;
* security;
* node cookies;
* latency;
* cluster topology;
* observability;
* failure detection.;== Garbage collection ==
<code>X</code> не змінюється.; Для класичного CRUD API Erlang теж можливий, але часто Elixir/Phoenix або інші мови можуть бути зручнішими для команди.; greeter:hello("Erlang").; BEAM додатково виконує інші мови, зокрема [[Elixir]].; {| class="wikitable"
* caches;
* lookup tables;
* shared read-heavy data;
* session data;
* counters;
* local state.; * '''gen_statem''' — behaviour для state machines.; {error, not_found}
[[Категорія:Fault Tolerance]]
Це істотно для exports, callbacks і documentation.;== gen_server ==
[[Категорія:Програмування]]
Erlang практичніший для resilient runtime systems.;cancelled Records часто зустрічаються в старому Erlang-коді.;== Actor model ==
ETS
Erlang і telecom
{customer, 10, "Anna"}
Кожен Erlang process має mailbox — чергу повідомлень.;- HTTP listener приймає request;
- process обробляє session;
- gen_server керує state;
- supervisor перезапускає workers;
- response повертається client.; Application має змогу мати:
* створення проєктів; * builds; * tests; * dependencies; * releases; * plugins; * Common Test; * Dialyzer integration.;== Lightweight processes == Інструменти можуть включати: '''Supervisor''' — бізнес-процес, який контролює child processes.; У Erlang <code>foo/1</code> і <code>foo/2</code> — різні функції.; * робота 24/7.; '''rebar3''' — популярний build tool для Erlang.; cast — коли потрібно без ускладнень надіслати команду.;== Message passing ==
Let it crash
- lightweight processes;
- scheduling;
- message passing;
- fault isolation;
- concurrency;
- soft real-time behaviour;
- garbage collection per process;
- distributed Erlang;
- hot code loading.;
- logs;
- metrics;
- tracing;
- process inspection;
- crash reports;
- supervision tree visibility;
- mailbox length monitoring;
- memory monitoring;
- scheduler utilization;
- distributed node health.; * документації;
- Dialyzer;
- API contracts;
- code navigation;
- maintenance.; Використання:
; # Захищати Erlang cookie.;
EUnitПеред додаванням dependency потрібно перевіряти:
ETS не є собою заміною persistent database, але дуже корисний для runtime state.; Erlang processes — це не операційні системні процеси.;== Immutability == sum(List) -> Tail recursionСенс: Це сильно відрізняється від shared-memory threading.;== Erlang у бізнесі == Erlang добре підходить для soft real-time: Приклад: Restart strategies
<pre>
[Head | Tail] = [1, 2, 3].; Замість цього застосовується recursion.; {error, Reason}
Приклад:
BEAM сильна в:
== Актуальна реліз ==
Supervision tree — основа Erlang fault tolerance.; gen_statem часто кращий за gen_server, коли логіка справді є собою state machine.; name,
У function clauses:
Приклад створення process:
[[Категорія:Actor Model]]
== Behaviours ==
Це комфортно для distributed systems, але потребує обережності:
Звичайно повідомлення додаються в кінець черги процесу.; Release має змогу включати:
io:format("Hello~n").; Maps корисні для structured data, configs, JSON-like structures і API payloads.; * protocols;
* connection lifecycle;
* payment workflow;
* device states;
* session management;
* telecom flows.; * 24/7 availability;
* soft real-time;
* hot upgrade;
* fault isolation;
* distributed operation;
* call/session management;
* supervision;
* message passing.;<pre>
io:format("Hello, ~s~n", [Name]).; Name = maps:get(name, User).;== Releases ==
У такому підході платформа складається з незалежних actors/processes.;
-export([hello/0]).; Основні behaviours:
Сценарії: receive Erlang можна використовувати для backend-сервісів.; # Використовувати gen_server для stateful servers, але не для всього.;Process має PID — ідентифікатор процесу.; └── Session Supervisor Binaries використовуються для bytes і binary data.; В Erlang backpressure важливий, бо mailbox process має змогу рости.; * distributed Erlang applications;
-module(greeter).;== Maps == == Lists ==
gen_server:cast(Server, {set_value, 42}).;[[Категорія:Функціональне програмування]]
Це легкі процеси всередині BEAM.; rebar3 new app my_app
Приклад:
Releases важливі для production, бо Erlang-система часто складається з багатьох OTP applications.; У BEAM garbage collection зазвичай process-local.;<pre>
'''Backpressure''' — механізм, який не надає можливість producer надсилати більше повідомлень, ніж consumer має змогу обробити.; Особливість
Customer = #customer {id = 1, name = "Anna"}.; rebar3 compile
Binaries важливі для:
'''PropEr''' — property-based testing tool для Erlang.; Багато core libraries і OTP написані Erlang.; Це означає: якщо бізнес-процес потрапив у неправильний стан, краще дати йому впасти, а supervisor перезапустить його в чистому стані.;== Variables ==
== Supervision tree ==
Приклад ідеї:
<pre>
|-
| '''Erlang''' || fault tolerance, concurrency, messaging, distributed systems, OTP
|-
| '''Go''' || простий backend, cloud-native, single binary, performance
|-
| '''Java''' || enterprise ecosystem, JVM, Spring, tooling
|-
| '''C#''' || .NET, ASP.NET Core, Microsoft ecosystem, enterprise
|-
| '''Python''' || scripting, data, AI, automation, швидкий старт
|}
Спроба присвоїти інше значення тій самій змінній не функціонує як у імперативних мовах.; Erlang API особливо доречні, коли багато одночасних connections або WebSocket sessions.; Для [[Тестування коду|тестування коду]] в Erlang варто поєднувати:
end).; A + B.; це функціональна мова програмування і runtime-платформа; додатково реалізовано distributed і fault-tolerant систем виступає ключовою рисою побудови concurrent забезпечується через '''Erlang'''.; # Додавати EUnit і Common Test.; Але Erlang має менший ринковий сегмент розробників, ніж mainstream backend-мови.; * '''Arity''' — кількість аргументів функції.; Але для hard real-time embedded control Erlang зазвичай не є собою першим вибором.; Erlang-код організовано в modules.; Erlang має web libraries/frameworks:
erl
Erlang-системи потребують безпеки так само, як інші backend-системи.; Вибір restart strategy — важлива архітектурна частина.; '''gen_server''' — generic server behaviour.; Вона використовує Erlang/OTP ecosystem, але має інший синтаксис і tooling.; Elixir не замінює Erlang в цілому.; Типові callbacks:
== Erlang і тестування коду ==
[[Категорія:Messaging]]
* EUnit для unit tests;
* Common Test для integration/system tests;
* PropEr для property-based tests;
* Dialyzer для static analysis;
* release tests;
* distributed tests;
* fault injection;
* supervisor restart tests.; Immutability сприяє:
== Erlang і distributed systems ==
Y = X + 5.; # Використовувати Dialyzer і typespecs.; Це корисно для систем, де деякі control messages не повинні довго чекати за великою чергою звичайних повідомлень.; '''EUnit''' — unit testing framework для Erlang.;== Atoms ==
NIF має змогу бути швидким, але небезпечним: поганий NIF має змогу заблокувати або зламати VM.;<ref>https://www.erlang.org/doc/apps/stdlib/supervisor.html</ref>
== Backpressure ==
Erlang добре підходить для distributed systems, але не робить їх автономно простими.; Значення не змінюються після створення.;== Erlang cookie security ==
gen_server:call(Server, get_state).;== Records ==
?assertEqual(5, add(2, 3)).; add(A, B) ->
* уникати race conditions;
* спростити reasoning;
* зробити процеси ізольованими;
* краще працювати з message passing.;<pre>
== Node cookie == Але Erlang дуже практичний: його функціональність служить не академічній красі, а побудові надійних систем.;== Erlang і WhatsApp == Якщо pattern не збігається, буде error.; Ідея: можна оновити код без повної зупинки системи.; * '''Mailbox''' — черга повідомлень процесу.; Він не веде обліковий облік, не проводить документи й не керує складом сам по собі.; Для CPU-heavy задач Erlang має змогу бути не найкращим вибором.; Erlang shell запускається командою: Observer корисний для локального аналізу й debugging.; Ключова ідея: Erlang не намагається зробити один бізнес-процес дуже складним.; Processes можуть бути linked або monitored.; * Elixir
* [https://www.erlang.org/ Erlang/OTP — офіційна сторінка]
* [https://www.erlang.org/downloads Erlang/OTP Downloads]
* [https://www.erlang.org/downloads/28 Erlang/OTP 28 Downloads]
* [https://www.erlang.org/news/180 Erlang/OTP 28.0 Release]
* [https://www.erlang.org/blog/highlights-otp-28/ Erlang/OTP 28 Highlights]
* [https://www.erlang.org/doc/ Erlang/OTP Documentation]
* [https://www.erlang.org/doc/apps/stdlib/supervisor.html Erlang/OTP — supervisor behaviour]
* [https://www.erlang.org/doc/system/gen_server_concepts.html Erlang/OTP — gen_server Behaviour]
* [https://www.erlang.org/docs/18/man/gen_server Erlang/OTP — gen_server manual]
* [https://www.erlang.org/doc/system/sup_princ.html Erlang/OTP — Supervisor Principles]
* [https://www.erlang.org/doc/system/applications.html Erlang/OTP — Applications]
* [https://www.erlang.org/doc/system/release_structure.html Erlang/OTP — Release Structure]
* [https://www.erlang.org/doc/system/distributed.html Erlang/OTP — Distributed Erlang]
* [https://github.com/erlang/otp Erlang/OTP GitHub Repository]
* [https://github.com/erlang/otp/releases Erlang/OTP GitHub Releases]
* [https://rebar3.org/ Rebar3]
* [https://www.erlang.org/doc/apps/eunit/chapter.html Erlang/OTP — EUnit]
* [https://www.erlang.org/doc/apps/common_test/ Common Test]
* [https://proper-testing.github.io/ PropEr]
* [https://learnyousomeerlang.com/ Learn You Some Erlang]
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki — Help:Formatting]
* [https://www.mediawiki.org/wiki/Help:Links MediaWiki — Help:Links]
'''Для документації:''' в Erlang істотно вказувати не без ускладнень “Erlang”, а конкретну версію Erlang/OTP: як ілюстрація, OTP 28.5.;[[Категорія:Telecom]]
Серед помітних новинок OTP 28 офіційно затверджений блог виділяє '''priority messages''' — opt-in механізм, який надає можливість процесу отримувати деякі urgent messages раніше за звичайні повідомлення в черзі.; # Використовувати OTP behaviours.; * <code>Head</code> буде <code>1</code>;
* <code>Tail</code> буде <code>[2,3]</code>.; ├── HTTP Listener
* комітити cookie в Git;
* використовувати однаковий cookie для всіх середовищ;
* писати cookie в logs;
* відкривати distributed Erlang ports у публічний інтернет без захисту.;<pre>
<div style="background:#f6ffed;border-left:6px solid #27ae60;padding:14px 18px;margin:16px 0;border-radius:8px;">
* <code>call</code> — синхронний request із відповіддю;
* <code>cast</code> — асинхронне повідомлення без очікування відповіді.; * '''Actor model''' — модель, де незалежні actors/processes спілкуються messages.; Цей приклад важливий не як “магічна реклама Erlang”, а як демонстрація того, що Erlang добре підходить для великої кількості одночасних з’єднань і messaging.; як ілюстрація:
== Hot code upgrade ==
ETS корисний для:
'''gen_statem''' — behaviour для state machines.; OTP охоплює:
'''OTP''' — це набір libraries, behaviours, design principles і tooling для побудови production-систем на Erlang.; Відправка повідомлення:
Erlang — функціональна мова.; Особливо уважно потрібно ставитися до distributed Erlang у відкритих мережах.; * network partitions;
* consistency;
* message ordering;
* retries;
* duplicate messages;
* idempotency;
* cluster membership;
* observability;
* backpressure;
* failure domains.; '''Soft real-time''' означає, що платформа має реагувати оперативно й стабільно, але не гарантує жорстких real-time deadlines як hard real-time systems.;== Priority messages ==
Це називають single assignment.; Для багатьох сучасних web/backend систем частіше використовують PostgreSQL, Redis, Kafka, RabbitMQ або інші спеціалізовані сховища.; Фокус
c(greeter).; * '''Supervision tree''' — дерево supervisors і workers.; io:format("Hello, ~s~n", [Name])
add(A) -> A + 1.; Саме ці вимоги сформували Erlang/OTP.;== Erlang і Haskell ==
* gen_server;
* gen_statem;
* gen_event;
* supervisor;
* application.; DETS схожий на disk-based варіант ETS, але має інші обмеження й performance characteristics.;<ref>https://www.erlang.org/blog/highlights-otp-28/</ref>
<pre>
== Головна ідея ==
істотно: atoms не збираються garbage collector у звичайному сенсі, з цієї причини не можна безконтрольно створювати atoms із зовнішнього input.; * application callback module;
* supervision tree;
* config;
* dependencies;
* workers;
* release metadata.;<ref>https://www.erlang.org/blog/highlights-otp-28/</ref>
* distributed Erlang cookie;
* TLS;
* input validation;
* authentication;
* authorization;
* secrets;
* dependency security;
* NIF risks;
* exposed ports;
* node connectivity;
* logging;
* remote shell access;
* configuration;
* cluster access.; {| class="wikitable"
Erlang часто описують через '''actor model'''.; Приклад:
Tail recursion — recursion, де recursive call є собою останньою операцією функції.; end.; * messaging;
Отримання: Erlang найсильніший там, де потрібні concurrency, fault tolerance і long-running systems.; Приклади: Atom — іменоване константне значення.; # Тестувати crash/restart scenarios.; Її потрібно проектувати.; Typespecs корисні для: Це означає, що він часто знаходить реальні проблеми, але не вимагає описувати всі типи наперед.;== DETS == Доступ: Erlang оптимізований для concurrency і availability, а не для raw CPU performance у стилі C/Rust.; * Priority messages — механізм OTP 28 для пріоритетних повідомлень.; Це не означає “писати поганий код”.; * Release — зібрана Erlang/OTP-система для deployment.; * BEAM — virtual machine для Erlang і Elixir.; Приклад: Erlang має змогу створювати HTTP API через Cowboy або інші libraries.; Erlang особливо корисний для: Компіляція в shell: Acc;
Observer — Erlang GUI tool для перегляду runtime-системи.;== Modules == Map — key-value структура.;├── Session Worker 1 ObserverList — базова структура даних.; -record(customer, {
RabbitMQ використовує сильні сторони Erlang:
Він має змогу показувати:
== Pattern matching ==
== Синтаксис Erlang ==
Telecom systems потребували:
Коли Erlang особливо кориснийТут: Потрібно контролювати: |
|---|