Erlang एक कार्यात्मक प्रोग्रामिंग भाषा है जिसे स्केलेबल और फॉल्ट-टॉलरेंट सिस्टम बनाने के लिए डिज़ाइन किया गया है, विशेष रूप से समवर्ती, वितरित अनुप्रयोगों के क्षेत्र में। इसे मूल रूप से 1980 के दशक के अंत में Ericsson द्वारा मजबूत टेलीकॉम सिस्टम बनाने के लिए विकसित किया गया था। Erlang की अनूठी विशेषताओं में हल्के प्रक्रियाओं का समर्थन, संदेश-प्रेषण समवर्तीता, गर्म कोड स्वैपिंग, और विश्वसनीयता पर एक मजबूत जोर शामिल है। आज, इसका उपयोग उन उद्योगों में व्यापक रूप से किया जाता है जिन्हें उच्च उपलब्धता और वितरित सिस्टम की आवश्यकता होती है, जैसे कि टेलीकॉम, मैसेजिंग अनुप्रयोग, और डेटाबेस सिस्टम।
Erlang का निर्माण 1980 के दशक के अंत में Joe Armstrong, Robert Virding, और Mike Williams द्वारा Ericsson में किया गया था, मुख्य रूप से टेलीकॉम उद्योग की आवश्यकताओं को पूरा करने के लिए। इस भाषा को बड़े पैमाने पर, फॉल्ट-टॉलरेंट सिस्टम बनाने की सुविधा के लिए विकसित किया गया था जो एक साथ कई कॉल और कनेक्शन को प्रबंधित कर सके।
1990 के दशक की शुरुआत में, Ericsson ने टेलीकॉम के अलावा Erlang की संभावनाओं को पहचाना। 1998 तक, Erlang को ओपन-सोर्स के रूप में जारी किया गया, जिससे एक व्यापक डेवलपर समुदाय को इसके विकास में योगदान करने की अनुमति मिली। ओपन-सोर्स आंदोलन ने BEAM वर्चुअल मशीन के विकास की ओर अग्रसर किया, जो Erlang कोड को निष्पादित करती है और तब से अन्य भाषाओं का समर्थन करने के लिए विकसित हुई है।
Erlang वर्तमान में Erlang/OTP टीम द्वारा बनाए रखा जाता है और इसका एक समर्पित समुदाय है। Erlang का रिलीज़ चक्र अधिक सुसंगत हो गया है, जिसमें प्रदर्शन, नई सुविधाओं, और बेहतर दस्तावेज़ीकरण पर ध्यान केंद्रित करते हुए नियमित अपडेट और सुधार शामिल हैं। इस भाषा ने Elixir के विकास को भी प्रेरित किया है, जो एक आधुनिक प्रोग्रामिंग भाषा है जो Erlang VM पर चलती है और इसके कई सिद्धांतों को शामिल करती है जबकि अतिरिक्त सुविधाएँ प्रदान करती है।
Erlang मुख्य रूप से एक कार्यात्मक भाषा है, जिसका अर्थ है कि फ़ंक्शन पहले श्रेणी के नागरिक होते हैं और इन्हें वेरिएबल की तरह पास किया जा सकता है।
double(X) -> X * 2.
Erlang की हल्की प्रक्रियाएँ हजारों समवर्ती प्रक्रियाओं को बिना महत्वपूर्ण ओवरहेड के बनाने की अनुमति देती हैं।
spawn(fun() -> io:format("Hello from a process!~n") end).
Erlang में प्रक्रियाएँ संदेश प्रेषण का उपयोग करके संवाद करती हैं, जो साझा स्थिति के बिना सुरक्षित संचार की अनुमति देती है।
Pid = spawn(fun() -> receive
{msg, Content} -> io:format("Received: ~s~n", [Content])
end end),
Pid ! {msg, "Hello!"}.
Erlang पैटर्न मिलान का उपयोग करता है, जो एक शक्तिशाली विशेषता है जो स्पष्ट और संक्षिप्त कोड की अनुमति देती है।
match(X) when X > 0 -> io:format("Positive number: ~B~n", [X]);
match(X) -> io:format("Non-positive number: ~B~n", [X]).
Erlang अपने "लेट इट क्रैश" दर्शन के माध्यम से फॉल्ट टॉलरेंस का समर्थन करता है, जिससे प्रक्रियाएँ विफल हो सकती हैं और सिस्टम को प्रभावित किए बिना पुनः प्रारंभ किया जा सकता है।
start_process() ->
spawn(fun() -> crash() end).
Erlang डेवलपर्स को चल रहे सिस्टम में कोड को बिना उन्हें रोके बदलने की अनुमति देता है।
%% पुराना संस्करण
-module(example).
-export([hello/0]).
hello() -> io:format("Old Version~n").
%% नया संस्करण
-module(example).
-export([hello/0]).
hello() -> io:format("New Version~n").
Erlang में डेटा अपरिवर्तनीय होता है, जिससे बग कम होते हैं और कोड के बारे में सोचना आसान होता है।
List = [1, 2, 3],
NewList = [4 | List].
Erlang में प्रक्रियाओं को विभिन्न नोड्स के बीच आसानी से वितरित करने की सुविधाएँ हैं।
net_adm:start() ->
net_adm:ping('other_node@hostname').
Erlang संरचित डेटा प्रकार बनाने के लिए रिकॉर्ड प्रकारों का समर्थन करता है।
-record(person, {name, age}).
Person = #person{name="Alice", age=30}.
Erlang सूची संकलन की अनुमति देता है ताकि सूचियों को संक्षेप में उत्पन्न और प्रबंधित किया जा सके।
Squares = [X*X || X <- [1,2,3]].
Erlang BEAM वर्चुअल मशीन पर निष्पादित होता है, जिसे समवर्ती और फॉल्ट-टॉलरेंट अनुप्रयोगों को चलाने के लिए डिज़ाइन किया गया है। BEAM प्रदर्शन को अनुकूलित करता है और गर्म कोड स्वैपिंग जैसी सुविधाओं की अनुमति देता है।
Erlang के लिए कई विकास वातावरण हैं, जिनमें Emacs और IntelliJ IDEA (Erlang प्लगइन के साथ) सबसे लोकप्रिय हैं। अन्य उल्लेखनीय उपकरणों में Erlang-विशिष्ट संपादक जैसे Erlide शामिल हैं।
Erlang प्रोजेक्ट बनाने के लिए, पारंपरिक रूप से rebar3
उपकरण का उपयोग किया जाता है, जो निर्भरताओं का प्रबंधन और निर्माण करता है। उदाहरण के लिए, एक नया प्रोजेक्ट बनाने के लिए, आप निष्पादित करेंगे:
rebar3 new app myapp
फिर, आप प्रोजेक्ट को निम्नलिखित के साथ बना सकते हैं:
rebar3 compile
Erlang का उपयोग टेलीकॉम, मैसेजिंग सिस्टम, और वास्तविक समय अनुप्रयोगों में व्यापक रूप से किया जाता है। उल्लेखनीय अनुप्रयोगों में शामिल हैं:
Erlang की प्रमुख ताकतें इसकी समवर्तीता मॉडल और फॉल्ट टॉलरेंस में निहित हैं, जो इसे निम्नलिखित भाषाओं से अलग करती हैं:
Erlang में कोड का अनुवाद करना और उससे अनुवाद करना इसके अद्वितीय पैरेडाइम के कारण जटिल हो सकता है। कुछ अनुवादों के लिए erl2cpp
जैसे उपकरण मौजूद हैं, लेकिन सभी भाषाओं के लिए कोई व्यापक स्वचालित उपकरण नहीं है। मैनुअल अनुवाद में शामिल हो सकता है: