Erlang 21 - 1. System Principles

1 प्रणाली सिद्धांत




erlang

1 प्रणाली सिद्धांत

1.1 सिस्टम शुरू करना

Erlang रनटाइम सिस्टम को कमांड erl साथ शुरू किया गया है:

% erl
Erlang/OTP 17 [erts-6.0] [hipe] [smp:8:8]

Eshell V6.0  (abort with ^G)
1> 

erl कई कमांड लाइन तर्क को समझता है, ERTS erl(1) मैनुअल पेज को ERTS में देखें। उनमें से कुछ का वर्णन इस अध्याय में भी किया गया है।

एप्लिकेशन प्रोग्राम फ़ंक्शन को init:get_argument(Key) कहकर कमांड-लाइन तर्कों के मूल्यों तक पहुंच सकते हैं init:get_argument(Key) या init:get_arguments() । ईआरटीएस में इनिट init(3) मैनुअल पेज देखें।

1.2 सिस्टम को पुनरारंभ करना और रोकना

रनटाइम सिस्टम को halt/0,1 कहकर रोका जाता है। विवरण के लिए, ERTS erlang(3) मैनुअल पेज को ERTS में देखें।

मॉड्यूल init में रनटाइम सिस्टम को फिर से शुरू करने, रिबूट करने और रोकने के लिए कार्य शामिल हैं:

init:restart()
init:reboot()
init:stop()

विवरण के लिए, ईआरटीएस में इनिट init(3) मैनुअल पेज देखें।

यदि एरलैंग शेल समाप्त हो जाता है, तो रनटाइम सिस्टम समाप्त हो जाता है।

1.3 बूट लिपियों

रनटाइम सिस्टम को बूट स्क्रिप्ट का उपयोग करके शुरू किया जाता है। बूट स्क्रिप्ट में निर्देश हैं कि किस कोड को लोड करना है और कौन सी प्रक्रिया और आवेदन शुरू करना है।

एक बूट स्क्रिप्ट फ़ाइल में एक्सटेंशन .script । रनटाइम सिस्टम स्क्रिप्ट के एक बाइनरी संस्करण का उपयोग करता है। इस बाइनरी बूट स्क्रिप्ट फ़ाइल में एक्सटेंशन .boot

कौन सी बूट स्क्रिप्ट का उपयोग करना है यह कमांड-लाइन फ्लैग -boot द्वारा निर्दिष्ट किया गया है। एक्सटेंशन .boot को छोड़ा जाना है। उदाहरण के लिए, बूट स्क्रिप्ट का उपयोग start_all.boot :

% erl -boot start_all

यदि कोई बूट स्क्रिप्ट निर्दिष्ट नहीं है, तो यह ROOT/bin/start के लिए Default Boot Scripts , Default Boot Scripts

कमांड-लाइन फ्लैग -init_debug बूट स्क्रिप्ट की व्याख्या करते समय init प्रक्रिया को कुछ डिबग जानकारी लिखता है:

% erl -init_debug
{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,logger}
...

बूट स्क्रिप्ट की वाक्य रचना और सामग्री के विस्तृत विवरण के लिए, SASL में script(4) मैनुअल पेज देखें।

डिफ़ॉल्ट बूट लिपियों

Erlang / OTP इन बूट स्क्रिप्ट के साथ आता है:

  • start_clean.boot - कोड के लिए कोड लोड करता है और कर्नेल और STDLIB शुरू करता है।
  • start_sasl.boot - अनुप्रयोग के लिए कोड लोड करता है और कर्नेल, STDLIB और SASL) शुरू करता है।
  • no_dot_erlang.boot - कोड के लिए कोड लोड करता है और कर्नेल और STDLIB शुरू करता है। फ़ाइल लोड हो .erlang । स्क्रिप्ट और अन्य उपकरणों के लिए उपयोगी है जो उपयोगकर्ता की प्राथमिकताओं के बावजूद समान व्यवहार करते हैं।

इंस्टॉल के समय Erlang / OTP Install करते समय उपयोगकर्ता द्वारा डिफ़ॉल्ट के रूप में उपयोग करने के लिए कौन सा start_clean और start_sasl तय किया गया है। उपयोगकर्ता से पूछा गया है "क्या आप एसएएसएल स्टार्टअप के बजाय न्यूनतम सिस्टम स्टार्टअप का उपयोग करना चाहते हैं"। यदि उत्तर हाँ है, तो start_clean का उपयोग किया जाता है, अन्यथा start_sasl का उपयोग किया जाता है। चयनित बूट स्क्रिप्ट की एक प्रतिलिपि बनाई गई है, जिसका नाम start.boot और निर्देशिका ROOT/bin में रखी गई है।

उपयोगकर्ता-परिभाषित बूट लिपियाँ

उपयोगकर्ता-परिभाषित बूट स्क्रिप्ट बनाने के लिए यह कभी-कभी उपयोगी या आवश्यक होता है। यह विशेष रूप से सही है जब एर्लैंग को एम्बेडेड मोड में चलाया जाता है, Code Loading Strategy

एक बूट स्क्रिप्ट को मैन्युअल रूप से लिखा जा सकता है। हालाँकि, फ़ंक्शन systools:make_script/1,2 का उपयोग करके इसे रिलीज़ रिसोर्स फ़ाइल Name.rel से जनरेट करके बूट स्क्रिप्ट बनाने की सिफारिश की जाती है। इसके लिए आवश्यक है कि स्रोत कोड को OTP डिजाइन सिद्धांतों के अनुसार अनुप्रयोगों के रूप में संरचित किया जाए। (कार्यक्रम को ओटीपी अनुप्रयोगों के संदर्भ में शुरू करने की आवश्यकता नहीं है, लेकिन सादे एर्लांग हो सकते हैं)।

.rel फ़ाइलों के बारे में अधिक जानकारी के लिए, SASL में OTP Design Principles और rel(4) मैनुअल पेज देखें।

बाइनरी बूट स्क्रिप्ट फ़ाइल Name.boot को बूट स्क्रिप्ट फ़ाइल Name.script से फ़ंक्शन systools:script2boot(File) का उपयोग करके बनाया गया है।

1.4 कोड लोड करने की रणनीति

रनटाइम सिस्टम को एम्बेडेड या इंटरैक्टिव मोड में शुरू किया जा सकता है। कमांड-लाइन फ्लैग -mode द्वारा कौन सा तय किया गया है।

% erl -mode embedded

डिफ़ॉल्ट मोड interactive

मोड गुण निम्नानुसार हैं:

  • एम्बेडेड मोड में, बूट स्क्रिप्ट के अनुसार सिस्टम स्टार्टअप के दौरान सभी कोड लोड किए जाते हैं। (कोड सर्वर को स्पष्ट रूप से आदेश दे कर कोड लोड किया जा सकता है।)
  • इंटरेक्टिव मोड में, कोड पहली बार संदर्भित होने पर गतिशील रूप से लोड होता है। जब किसी मॉड्यूल में किसी फ़ंक्शन को कॉल किया जाता है, और मॉड्यूल लोड नहीं होता है, तो कोड सर्वर कोड पथ को खोजता है और मॉड्यूल को सिस्टम में लोड करता है।

प्रारंभ में, कोड पथ में वर्तमान कार्यशील निर्देशिका और ROOT/lib अंतर्गत सभी ऑब्जेक्ट कोड निर्देशिकाएं होती हैं, जहाँ ROOT Erlang / OTP की स्थापना निर्देशिका है। निर्देशिकाएँ नाम की जा सकती हैं Name[-Vsn] । कोड सर्वर, डिफ़ॉल्ट रूप से, उन लोगों के बीच उच्चतम संस्करण संख्या के साथ निर्देशिका का चयन करता है जिनके पास समान Name -Vsn प्रत्यय वैकल्पिक है। यदि Name[-Vsn] निर्देशिका के तहत एक ebin निर्देशिका मौजूद है, तो इस निर्देशिका को कोड पथ में जोड़ा जाता है।

कोड-लाइन को कमांड-लाइन झंडे -pz Directories और -pz Directories का उपयोग करके बढ़ाया जा सकता है। ये क्रमशः सिर या कोड पथ के अंत में Directories जोड़ते हैं। उदाहरण:

% erl -pa /home/arne/mycode

कोड सर्वर मॉड्यूल code में खोज पथ को संशोधित करने और जांचने के लिए कई कार्य होते हैं, कर्नेल में code(3) मैनुअल पेज देखें।

1.5 फ़ाइल प्रकार

निम्न फ़ाइल प्रकार Erlang / OTP में परिभाषित किए गए हैं:

फाइल का प्रकार फ़ाइल का नाम / विस्तार में प्रलेखित
मॉड्यूल .erl Erlang Reference Manual
फ़ाइल शामिल करें .hrl Erlang Reference Manual
संसाधन फ़ाइल जारी करें .rel rel(4) मैनुअल पेज
एप्लिकेशन संसाधन फ़ाइल .app app(4) कर्नेल में मैनुअल पेज
बूट स्क्रिप्ट .script SASL में script(4) मैनुअल पेज
बाइनरी बूट स्क्रिप्ट .boot -
विन्यास फाइल .config config(4) कर्नेल में मैनुअल पेज
एप्लिकेशन नवीनीकरण फ़ाइल .appup SASL में appup(4) मैनुअल पेज
नवीनीकरण फ़ाइल को रिलीज़ करें relup SASL में relup(4) मैनुअल पेज

तालिका 1.1: फ़ाइल प्रकार