زبان برنامه نویسی Erlang

مرور کلی

ارلنگ یک زبان برنامه‌نویسی تابعی است که برای ساخت سیستم‌های مقیاس‌پذیر و مقاوم در برابر خطا طراحی شده است، به‌ویژه در حوزه برنامه‌های توزیع‌شده و همزمان. این زبان در اواخر دهه 1980 توسط اریکسون برای ایجاد سیستم‌های مخابراتی قوی توسعه یافت. ویژگی‌های منحصر به فرد ارلنگ شامل پشتیبانی از فرآیندهای سبک، همزمانی مبتنی بر ارسال پیام، تعویض کد داغ و تأکید قوی بر قابلیت اطمینان است. امروزه، این زبان به‌طور گسترده‌ای در صنایعی که به دسترسی بالا و سیستم‌های توزیع‌شده نیاز دارند، مانند مخابرات، برنامه‌های پیام‌رسان و سیستم‌های پایگاه داده استفاده می‌شود.

جنبه‌های تاریخی

ایجاد و توسعه اولیه

ارلنگ در اواخر دهه 1980 توسط جو آرمسترانگ، رابرت ویرینگ و مایک ویلیامز در اریکسون ایجاد شد، عمدتاً برای پاسخگویی به نیازهای صنعت مخابرات. این زبان برای تسهیل ساخت سیستم‌های بزرگ مقیاس و مقاوم در برابر خطا که می‌توانند چندین تماس و اتصال را به‌طور همزمان مدیریت کنند، توسعه یافت.

تکامل به منبع باز

در اوایل دهه 1990، اریکسون پتانسیل ارلنگ را فراتر از مخابرات شناسایی کرد. تا سال 1998، ارلنگ به‌عنوان منبع باز منتشر شد که به جامعه وسیع‌تری از توسعه‌دهندگان اجازه داد تا به رشد آن کمک کنند. جنبش منبع باز منجر به توسعه ماشین مجازی BEAM شد که کد ارلنگ را اجرا می‌کند و از آن زمان به‌طور مداوم برای پشتیبانی از زبان‌های دیگر تکامل یافته است.

وضعیت کنونی

ارلنگ در حال حاضر توسط تیم ارلنگ/OTP نگهداری می‌شود و دارای یک جامعه dedicated است. چرخه انتشار ارلنگ به‌طور مداوم‌تر شده است و به‌روزرسانی‌ها و بهبودهای منظم بر روی عملکرد، ویژگی‌های جدید و مستندات بهبود یافته متمرکز است. این زبان همچنین الهام‌بخش توسعه الیکسیر، یک زبان برنامه‌نویسی مدرن است که بر روی ماشین مجازی ارلنگ اجرا می‌شود و بسیاری از اصول آن را در حالی که ویژگی‌های اضافی را ارائه می‌دهد، در بر می‌گیرد.

ویژگی‌های نحو

پارادایم برنامه‌نویسی تابعی

ارلنگ عمدتاً یک زبان تابعی است، به این معنی که توابع شهروندان درجه یک هستند و می‌توانند مانند متغیرها منتقل شوند.

double(X) -> X * 2.

فرآیندهای سبک

فرآیندهای سبک ارلنگ امکان ایجاد هزاران فرآیند همزمان را بدون بار اضافی قابل توجه فراهم می‌کنند.

spawn(fun() -> io:format("Hello from a process!~n") end).

ارسال پیام

فرآیندها در ارلنگ با استفاده از ارسال پیام ارتباط برقرار می‌کنند که امکان ارتباط ایمن بدون حالت مشترک را فراهم می‌کند.

Pid = spawn(fun() -> receive
                      {msg, Content} -> io:format("Received: ~s~n", [Content])
                  end end),
Pid ! {msg, "Hello!"}.

تطبیق الگو

ارلنگ از تطبیق الگو استفاده می‌کند، ویژگی‌ای قدرتمند که امکان نوشتن کد واضح و مختصر را فراهم می‌کند.

match(X) when X > 0 -> io:format("Positive number: ~B~n", [X]);
match(X) -> io:format("Non-positive number: ~B~n", [X]).

تحمل خطا

ارلنگ از طریق فلسفه "بگذارید خراب شود" از تحمل خطا پشتیبانی می‌کند و به فرآیندها اجازه می‌دهد که خراب شوند و بدون تأثیر بر سیستم دوباره راه‌اندازی شوند.

start_process() ->
    spawn(fun() -> crash() end).

تعویض کد داغ

ارلنگ به توسعه‌دهندگان اجازه می‌دهد که کد را در سیستم‌های در حال اجرا بدون متوقف کردن آن‌ها تغییر دهند.

%% نسخه قدیمی
-module(example).
-export([hello/0]).
hello() -> io:format("Old Version~n").

%% نسخه جدید
-module(example).
-export([hello/0]).
hello() -> io:format("New Version~n").

عدم تغییرپذیری

داده‌ها در ارلنگ غیرقابل تغییر هستند که منجر به کاهش باگ‌ها و آسان‌تر شدن استدلال در مورد کد می‌شود.

List = [1, 2, 3],
NewList = [4 | List].

پشتیبانی داخلی از توزیع

ارلنگ ویژگی‌هایی دارد که امکان توزیع آسان فرآیندها در میان گره‌های مختلف را فراهم می‌کند.

net_adm:start() -> 
  net_adm:ping('other_node@hostname').

انواع رکورد

ارلنگ از انواع رکورد برای ایجاد انواع داده ساختاری پشتیبانی می‌کند.

-record(person, {name, age}).
Person = #person{name="Alice", age=30}.

درک لیست

ارلنگ اجازه می‌دهد تا درک لیست‌ها برای تولید و دستکاری لیست‌ها به‌طور مختصر انجام شود.

Squares = [X*X || X <- [1,2,3]].

ابزارهای توسعه‌دهنده، زمان اجرا و IDEها

زمان اجرا

ارلنگ بر روی ماشین مجازی BEAM اجرا می‌شود که برای اجرای برنامه‌های همزمان و مقاوم در برابر خطا طراحی شده است. BEAM عملکرد را بهینه می‌کند و ویژگی‌هایی مانند تعویض کد داغ را امکان‌پذیر می‌سازد.

IDEهای محبوب

چندین محیط توسعه برای ارلنگ وجود دارد که از میان آن‌ها Emacs و IntelliJ IDEA (با پلاگین ارلنگ) از محبوب‌ترین‌ها هستند. سایر ابزارهای قابل توجه شامل ویرایشگرهای خاص ارلنگ مانند Erlide است.

ساخت یک پروژه

برای ایجاد یک پروژه ارلنگ، به‌طور سنتی از ابزار rebar3 استفاده می‌شود که وابستگی‌ها و ساخت‌ها را مدیریت می‌کند. به‌عنوان مثال، برای ایجاد یک پروژه جدید، باید دستور زیر را اجرا کنید:

rebar3 new app myapp

سپس می‌توانید پروژه را با:

rebar3 compile

بسازید.

کاربردهای ارلنگ

ارلنگ به‌طور گسترده‌ای در مخابرات، سیستم‌های پیام‌رسان و برنامه‌های زمان واقعی استفاده می‌شود. برنامه‌های قابل توجه شامل:

مقایسه با زبان‌های مشابه

نقاط قوت اصلی ارلنگ در مدل همزمانی و تحمل خطا نهفته است که آن را از زبان‌هایی مانند:

نکات ترجمه کد به کد

ترجمه کد به و از ارلنگ می‌تواند به دلیل پارادایم‌های منحصر به فرد آن پیچیده باشد. ابزارهایی مانند erl2cpp برای برخی از ترجمه‌ها وجود دارد، اما هیچ ابزار خودکار گسترده‌ای برای تمام زبان‌ها وجود ندارد. ترجمه دستی ممکن است شامل: