प्रोग्रामिंग भाषा Erlang

अवलोकन

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]].

डेवलपर के उपकरण, रनटाइम, और IDEs

रनटाइम

Erlang BEAM वर्चुअल मशीन पर निष्पादित होता है, जिसे समवर्ती और फॉल्ट-टॉलरेंट अनुप्रयोगों को चलाने के लिए डिज़ाइन किया गया है। BEAM प्रदर्शन को अनुकूलित करता है और गर्म कोड स्वैपिंग जैसी सुविधाओं की अनुमति देता है।

लोकप्रिय IDEs

Erlang के लिए कई विकास वातावरण हैं, जिनमें Emacs और IntelliJ IDEA (Erlang प्लगइन के साथ) सबसे लोकप्रिय हैं। अन्य उल्लेखनीय उपकरणों में Erlang-विशिष्ट संपादक जैसे Erlide शामिल हैं।

एक प्रोजेक्ट बनाना

Erlang प्रोजेक्ट बनाने के लिए, पारंपरिक रूप से rebar3 उपकरण का उपयोग किया जाता है, जो निर्भरताओं का प्रबंधन और निर्माण करता है। उदाहरण के लिए, एक नया प्रोजेक्ट बनाने के लिए, आप निष्पादित करेंगे:

rebar3 new app myapp

फिर, आप प्रोजेक्ट को निम्नलिखित के साथ बना सकते हैं:

rebar3 compile

Erlang के अनुप्रयोग

Erlang का उपयोग टेलीकॉम, मैसेजिंग सिस्टम, और वास्तविक समय अनुप्रयोगों में व्यापक रूप से किया जाता है। उल्लेखनीय अनुप्रयोगों में शामिल हैं:

समान भाषाओं के साथ तुलना

Erlang की प्रमुख ताकतें इसकी समवर्तीता मॉडल और फॉल्ट टॉलरेंस में निहित हैं, जो इसे निम्नलिखित भाषाओं से अलग करती हैं:

स्रोत से स्रोत अनुवाद टिप्स

Erlang में कोड का अनुवाद करना और उससे अनुवाद करना इसके अद्वितीय पैरेडाइम के कारण जटिल हो सकता है। कुछ अनुवादों के लिए erl2cpp जैसे उपकरण मौजूद हैं, लेकिन सभी भाषाओं के लिए कोई व्यापक स्वचालित उपकरण नहीं है। मैनुअल अनुवाद में शामिल हो सकता है: