समवर्ती एमएल: Difference between revisions

From Vigyanwiki
(text)
(text)
Line 18: Line 18:
}}
}}


समवर्ती एमएल (सीएमएल) [[मानक एमएल]] प्रोग्रामिंग भाषा का [[समवर्ती (कंप्यूटर विज्ञान)]] विस्तार है, जो प्रोग्रामर को भाषा में निर्मित होने के बजाय प्रथम श्रेणी के कंपोजेबल संचार सार बनाने की अनुमति देने की क्षमता की विशेषता है। सीएमएल और इसके आदिम संचालन के डिजाइन को कई अन्य प्रोग्रामिंग भाषाओं जैसे [[जीएनयू गुइल]]<ref>{{cite web|url=https://wingolog.org/archives/2017/06/29/a-new-concurrent-ml|title=एक नया समवर्ती एमएल|date=June 29, 2017|accessdate=July 11, 2018|first=Andy|last=Wingo}}</ref> [[रैकेट (प्रोग्रामिंग भाषा)]],<ref>{{cite journal|last1=Flatt|first1=Matthew|last2=Findler|first2=Robert Bruce|date=2004|title=मार-सुरक्षित तुल्यकालन सार|journal=Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation|volume=39|issue=6|pages=47–58|doi=10.1145/996841.996849|s2cid=5547460 }}</ref> और मटियोर में अपनाया गया है।<ref name="manticore">{{cite web|url=http://manticore.cs.uchicago.edu/papers/cefp09-notes.pdf|title=मटियोर में प्रोग्रामिंग, एक विषम समानांतर कार्यात्मक भाषा|last1=Fluet|first1=Matthew|last2=Bergstrom|first2=Lars|last3=Ford|first3=Nic|last4=Rainey|first4=Mike|last5=Reppy|first5=John|last6=Shaw|first6=Adam|last7=Xiao|first7=Yingqi|date=May 2009|accessdate=July 11, 2018}}</ref>
समवर्ती एमएल (सीएमएल) [[मानक एमएल]] प्रोग्रामिंग भाषा का [[समवर्ती (कंप्यूटर विज्ञान)]] विस्तार है, जो प्रोग्रामर को भाषा में निर्मित होने के अतिरिक्त प्रथम श्रेणी के कंपोजेबल संचार सार बनाने की अनुमति देने की क्षमता की विशेषता है। सीएमएल और इसके आदिम संचालन के डिजाइन को कई अन्य प्रोग्रामिंग भाषाओं जैसे [[जीएनयू गुइल]]<ref>{{cite web|url=https://wingolog.org/archives/2017/06/29/a-new-concurrent-ml|title=एक नया समवर्ती एमएल|date=June 29, 2017|accessdate=July 11, 2018|first=Andy|last=Wingo}}</ref> [[रैकेट (प्रोग्रामिंग भाषा)]],<ref>{{cite journal|last1=Flatt|first1=Matthew|last2=Findler|first2=Robert Bruce|date=2004|title=मार-सुरक्षित तुल्यकालन सार|journal=Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation|volume=39|issue=6|pages=47–58|doi=10.1145/996841.996849|s2cid=5547460 }}</ref> और मटियोर में अपनाया गया है।<ref name="manticore">{{cite web|url=http://manticore.cs.uchicago.edu/papers/cefp09-notes.pdf|title=मटियोर में प्रोग्रामिंग, एक विषम समानांतर कार्यात्मक भाषा|last1=Fluet|first1=Matthew|last2=Bergstrom|first2=Lars|last3=Ford|first3=Nic|last4=Rainey|first4=Mike|last5=Reppy|first5=John|last6=Shaw|first6=Adam|last7=Xiao|first7=Yingqi|date=May 2009|accessdate=July 11, 2018}}</ref>
== अवधारणाएं ==
== अवधारणाएं ==


कई प्रोग्रामिंग लैंग्वेज जो कॉन्करेंसी ऑफर [[चैनल (प्रोग्रामिंग)]] का समर्थन करती हैं, जो सिस्टम में समवर्ती रूप से चलने वाली [[प्रक्रिया (कंप्यूटिंग)]] या [[थ्रेड (कंप्यूटिंग)]] के बीच मूल्यों के आदान-प्रदान की अनुमति देती हैं। प्रक्रियाओं के बीच स्थापित संचार एक विशिष्ट प्रोटोकॉल का पालन कर सकता है, जिससे प्रोग्रामर को संचार के आवश्यक पैटर्न को स्थापित करने के लिए फ़ंक्शन लिखने की आवश्यकता होती है। इस बीच, एक संचार प्रणाली को अक्सर कई चैनलों की स्थापना की आवश्यकता होती है, जैसे कि एकाधिक [[सर्वर (कंप्यूटिंग)]], और फिर नया डेटा उपलब्ध होने पर उपलब्ध चैनलों के बीच चयन करना। इसे [[ मतदान (कंप्यूटर विज्ञान) ]] का उपयोग करके पूरा किया जा सकता है, जैसे कि यूनिक्स सिस्टम पर [[ चयन करें (यूनिक्स) ]] ऑपरेशन के साथ।
कई प्रोग्रामिंग लैंग्वेज जो संगामिति का समर्थन करती हैं, संचार [[चैनल (प्रोग्रामिंग)]] प्रदान करती हैं जो [[प्रक्रिया (कंप्यूटिंग)]] या सिस्टम में समवर्ती रूप से चलने वाले [[थ्रेड (कंप्यूटिंग)]] के बीच मान के आदान-प्रदान की अनुमति देती हैं। प्रक्रियाओं के बीच स्थापित संचार विशिष्ट प्रोटोकॉल का पालन करता है, जिससे प्रोग्रामर को संचार के आवश्यक पैटर्न को स्थापित करने के लिए फ़ंक्शन लिखने की आवश्यकता होती है। इस बीच, संचार प्रणाली को अधिकांशतः कई चैनलों की स्थापना की आवश्यकता होती है, जैसे कि एकाधिक [[सर्वर (कंप्यूटिंग)]], और फिर नया डेटा उपलब्ध होने पर उपलब्ध चैनलों के बीच चयन करना होता है। इसे[[ मतदान (कंप्यूटर विज्ञान) | पोलिंग (कंप्यूटर विज्ञान)]] का उपयोग करके पूरा किया जा सकता है, जैसे कि यूनिक्स सिस्टम पर चुनिंदा ऑपरेशन के साथ किया जाता है।


पहले से मौजूद प्रोटोकॉल के भीतर पोलिंग और [[ अवरुद्ध करना (कंप्यूटिंग) ]] के लिए जाँच शुरू करने की आवश्यकता के कारण एप्लिकेशन-विशिष्ट प्रोटोकॉल और बहु-पक्षीय संचार दोनों का संयोजन जटिल हो सकता है। समवर्ती एमएल प्रोग्रामिंग अवधारणाओं के इस [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] को सिंक्रनाइज़ करने योग्य घटनाओं को शुरू करके इस समस्या को हल करता है।<ref name="cml-paper">{{cite book|journal=Functional Programming, Concurrency, Simulation and Automated Reasoning|volume=693|pages=165–198|first=John H.|last=Reppy|chapter=Concurrent ML: Design, application and semantics|date=1993|doi=10.1007/3-540-56883-2_10|series=Lecture Notes in Computer Science|isbn=978-3-540-56883-4|citeseerx=10.1.1.50.7965}}</ref> ईवेंट एक प्रथम श्रेणी का अमूर्त है जिसका उपयोग सिंक्रोनाइज़ेशन ऑपरेशन के साथ किया जा सकता है (जिसे कहा जाता है {{code|sync}} सीएमएल और रैकेट में) संभावित रूप से ब्लॉक करने के लिए और फिर संचार से उत्पन्न कुछ मूल्य उत्पन्न करने के लिए (उदाहरण के लिए, एक चैनल पर प्रसारित डेटा)।
एप्लिकेशन-विशिष्ट प्रोटोकॉल और बहु-पक्षीय संचार दोनों का संयोजन पोलिंग आरम्भ करने और पहले से मौजूद प्रोटोकॉल के भीतर ब्लॉकिंग की जांच करने की आवश्यकता के कारण जटिल हो सकता है। समवर्ती एमएल प्रोग्रामिंग अवधारणाओं के इस [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] को कम करके समकालिक घटनाओं को आरम्भ करके इस समस्या को हल करता है।<ref name="cml-paper">{{cite book|journal=Functional Programming, Concurrency, Simulation and Automated Reasoning|volume=693|pages=165–198|first=John H.|last=Reppy|chapter=Concurrent ML: Design, application and semantics|date=1993|doi=10.1007/3-540-56883-2_10|series=Lecture Notes in Computer Science|isbn=978-3-540-56883-4|citeseerx=10.1.1.50.7965}}</ref> ईवेंट प्रथम श्रेणी का अमूर्त है जिसका उपयोग संभावित रूप से ब्लॉक करने के लिए सिंक्रोनाइज़ेशन ऑपरेशन (सीएमएल और रैकेट में{{code|sync}} कहा जाता है ) के साथ किया जाता है और फिर संचार से उत्पन्न मान उत्पन्न करता है (उदाहरण के लिए, एक चैनल पर प्रसारित डेटा)।


सीएमएल में, कई आदिम संचालनों का उपयोग करके घटनाओं को जोड़ा या हेरफेर किया जा सकता है। प्रत्येक आदिम ऑपरेशन घटना को संशोधित करने के बजाय एक नई घटना का निर्माण करता है, जो वांछित संचार पैटर्न का प्रतिनिधित्व करने वाले यौगिक घटनाओं के निर्माण की अनुमति देता है। उदाहरण के लिए, सीएमएल प्रोग्रामर को एक यौगिक घटना बनाने के लिए कई उप-घटनाओं को संयोजित करने की अनुमति देता है जो तब उप-घटनाओं में से एक का गैर-नियतात्मक विकल्प बना सकता है। एक अन्य आदिम एक नया ईवेंट बनाता है जो मूल ईवेंट पर सिंक्रनाइज़ेशन से उत्पन्न मान को संशोधित करेगा। इन घटनाओं में संचार के पैटर्न शामिल हैं, जो गैर-सीएमएल भाषा में, आम तौर पर प्रत्येक प्रकार की घटना के लिए पोलिंग लूप या हैंडलर के साथ फ़ंक्शन का उपयोग करके नियंत्रित किया जाएगा।
सीएमएल में, कई आदिम संचालनों का उपयोग करके घटनाओं को जोड़ा या कुशलतापूर्वक प्रयोग किया जा सकता है। प्रत्येक आदिम ऑपरेशन घटना को संशोधित करने के अतिरिक्त एक नई घटना का निर्माण करता है, जो वांछित संचार पैटर्न का प्रतिनिधित्व करने वाले यौगिक घटनाओं के निर्माण की अनुमति देता है। उदाहरण के लिए, सीएमएल प्रोग्रामर को यौगिक घटना बनाने के लिए कई उप-घटनाओं को संयोजित करने की अनुमति देता है जो तब उप-घटनाओं में से एक का गैर-नियतात्मक विकल्प बना सकता है। एक अन्य आदिम नया ईवेंट बनाता है जो मूल ईवेंट पर समकालन से उत्पन्न मान को संशोधित करता है। इन घटनाओं में संचार के पैटर्न सम्मिलित हैं, जो गैर-सीएमएल भाषा में, सामान्यतः प्रत्येक प्रकार की घटना के लिए पोलिंग लूप या हैंडलर के साथ फ़ंक्शन का उपयोग करके नियंत्रित किया जाता है।


== हैलो वर्ल्ड ==
== हैलो वर्ल्ड ==
यहां एक प्रोग्राम है जो प्रिंट करता है {{code|lang=sml|"Hello, world!"}} कंसोल के लिए। यह [[स्ट्रिंग (कंप्यूटर विज्ञान)]] के लिए एक चैनल के साथ एक [[धागा (कंप्यूटर विज्ञान)]] पैदा करता है, और दूसरा धागा जो चैनल पर प्राप्त स्ट्रिंग को प्रिंट करता है। यह न्यू जर्सी के मानक एमएल | एसएमएल/एनजे और सीएमएल का उपयोग करता है। (ध्यान दें कि गैर linux-x86 प्लेटफॉर्म पर हीप का नाम अलग होगा; आपको cml_test.x86-linux के साथ लाइन को कुछ अलग करने की आवश्यकता हो सकती है।)
यहां एक प्रोग्राम है {{code|lang=sml|"Hello, world!"}} जो कंसोल के लिए प्रिंट करता है। यह [[स्ट्रिंग (कंप्यूटर विज्ञान)]] के लिए चैनल के साथ [[धागा (कंप्यूटर विज्ञान)|थ्रेड (कंप्यूटर विज्ञान)]] बनाता है, और दूसरा थ्रेड जो चैनल पर प्राप्त स्ट्रिंग को प्रिंट करता है। यह एसएमएल/एनजे और सीएमएल का उपयोग करता है। (ध्यान दें कि गैर linux-x86 प्लेटफॉर्म पर हीप का नाम अलग होगा; आपको cml_test.x86-linux के साथ लाइन को कुछ अलग करने की आवश्यकता हो सकती है।)


{| class="wikitable"
{| class="wikitable"

Revision as of 13:05, 22 May 2023

Concurrent ML
ParadigmConcurrent computing
परिवारML
पहली प्रस्तुति1991; 33 years ago (1991)[1]
वेबसाइटhttp://cml.cs.uchicago.edu/
Major implementations
SML/NJ,[2] MLton,[3] Manticore[4]

समवर्ती एमएल (सीएमएल) मानक एमएल प्रोग्रामिंग भाषा का समवर्ती (कंप्यूटर विज्ञान) विस्तार है, जो प्रोग्रामर को भाषा में निर्मित होने के अतिरिक्त प्रथम श्रेणी के कंपोजेबल संचार सार बनाने की अनुमति देने की क्षमता की विशेषता है। सीएमएल और इसके आदिम संचालन के डिजाइन को कई अन्य प्रोग्रामिंग भाषाओं जैसे जीएनयू गुइल[5] रैकेट (प्रोग्रामिंग भाषा),[6] और मटियोर में अपनाया गया है।[4]

अवधारणाएं

कई प्रोग्रामिंग लैंग्वेज जो संगामिति का समर्थन करती हैं, संचार चैनल (प्रोग्रामिंग) प्रदान करती हैं जो प्रक्रिया (कंप्यूटिंग) या सिस्टम में समवर्ती रूप से चलने वाले थ्रेड (कंप्यूटिंग) के बीच मान के आदान-प्रदान की अनुमति देती हैं। प्रक्रियाओं के बीच स्थापित संचार विशिष्ट प्रोटोकॉल का पालन करता है, जिससे प्रोग्रामर को संचार के आवश्यक पैटर्न को स्थापित करने के लिए फ़ंक्शन लिखने की आवश्यकता होती है। इस बीच, संचार प्रणाली को अधिकांशतः कई चैनलों की स्थापना की आवश्यकता होती है, जैसे कि एकाधिक सर्वर (कंप्यूटिंग), और फिर नया डेटा उपलब्ध होने पर उपलब्ध चैनलों के बीच चयन करना होता है। इसे पोलिंग (कंप्यूटर विज्ञान) का उपयोग करके पूरा किया जा सकता है, जैसे कि यूनिक्स सिस्टम पर चुनिंदा ऑपरेशन के साथ किया जाता है।

एप्लिकेशन-विशिष्ट प्रोटोकॉल और बहु-पक्षीय संचार दोनों का संयोजन पोलिंग आरम्भ करने और पहले से मौजूद प्रोटोकॉल के भीतर ब्लॉकिंग की जांच करने की आवश्यकता के कारण जटिल हो सकता है। समवर्ती एमएल प्रोग्रामिंग अवधारणाओं के इस युग्मन (कंप्यूटर प्रोग्रामिंग) को कम करके समकालिक घटनाओं को आरम्भ करके इस समस्या को हल करता है।[7] ईवेंट प्रथम श्रेणी का अमूर्त है जिसका उपयोग संभावित रूप से ब्लॉक करने के लिए सिंक्रोनाइज़ेशन ऑपरेशन (सीएमएल और रैकेट मेंsync कहा जाता है ) के साथ किया जाता है और फिर संचार से उत्पन्न मान उत्पन्न करता है (उदाहरण के लिए, एक चैनल पर प्रसारित डेटा)।

सीएमएल में, कई आदिम संचालनों का उपयोग करके घटनाओं को जोड़ा या कुशलतापूर्वक प्रयोग किया जा सकता है। प्रत्येक आदिम ऑपरेशन घटना को संशोधित करने के अतिरिक्त एक नई घटना का निर्माण करता है, जो वांछित संचार पैटर्न का प्रतिनिधित्व करने वाले यौगिक घटनाओं के निर्माण की अनुमति देता है। उदाहरण के लिए, सीएमएल प्रोग्रामर को यौगिक घटना बनाने के लिए कई उप-घटनाओं को संयोजित करने की अनुमति देता है जो तब उप-घटनाओं में से एक का गैर-नियतात्मक विकल्प बना सकता है। एक अन्य आदिम नया ईवेंट बनाता है जो मूल ईवेंट पर समकालन से उत्पन्न मान को संशोधित करता है। इन घटनाओं में संचार के पैटर्न सम्मिलित हैं, जो गैर-सीएमएल भाषा में, सामान्यतः प्रत्येक प्रकार की घटना के लिए पोलिंग लूप या हैंडलर के साथ फ़ंक्शन का उपयोग करके नियंत्रित किया जाता है।

हैलो वर्ल्ड

यहां एक प्रोग्राम है "Hello, world!" जो कंसोल के लिए प्रिंट करता है। यह स्ट्रिंग (कंप्यूटर विज्ञान) के लिए चैनल के साथ थ्रेड (कंप्यूटर विज्ञान) बनाता है, और दूसरा थ्रेड जो चैनल पर प्राप्त स्ट्रिंग को प्रिंट करता है। यह एसएमएल/एनजे और सीएमएल का उपयोग करता है। (ध्यान दें कि गैर linux-x86 प्लेटफॉर्म पर हीप का नाम अलग होगा; आपको cml_test.x86-linux के साथ लाइन को कुछ अलग करने की आवश्यकता हो सकती है।)

cml_test.cm
Library
    structure Hello
is
    $cml/basis.cm
    $cml/cml.cm
    cml_test.sml
cml_test.sml
structure Hello = struct
    open CML

    fun hello () = let
        val c : string chan = channel ()
        in
            spawn (fn () => TextIO.print (recv c));
            send (c, "Hello, world!\n");
            exit ()
        end

    fun main (_, argv) =
        RunCML.doit (fn () => ignore (spawn hello), NONE)
end
bash
$ ml-build cml_test.cm Hello.main
Standard ML of New Jersey v110.60 [built: Mon Nov 27 14:19:21 2006]
[scanning cml_test.cm]
[library $cml/basis.cm is stable]
[library $cml/cml.cm is stable]
[parsing (cml_test.cm):cml_test.sml]
[creating directory .cm/SKEL]
[library $cml/cml-internal.cm is stable]
[library $cml/core-cml.cm is stable]
[library $SMLNJ-BASIS/basis.cm is stable]
[compiling (cml_test.cm):cml_test.sml]
[creating directory .cm/GUID]
[creating directory .cm/x86-unix]
[code: 2170, data: 42, env: 2561 bytes]
[scanning 18518-export.cm]
[scanning (18518-export.cm):cml_test.cm]
[parsing (18518-export.cm):18518-export.sml]
[compiling (18518-export.cm):18518-export.sml]
[code: 309, data: 37, env: 42 bytes]
$ heap2exec cml_test.x86-linux cml_test
$ ./cml_test
Hello, world!


बाहरी संबंध


संदर्भ

  1. Reppy, John H. (June 1991). CML: a Higher-Order Concurrent Language. PLDI.
  2. "What is Standard ML of New Jersey?". Retrieved April 5, 2021.
  3. "ConcurrentMLImplementation". Retrieved April 5, 2021.
  4. 4.0 4.1 Fluet, Matthew; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adam; Xiao, Yingqi (May 2009). "मटियोर में प्रोग्रामिंग, एक विषम समानांतर कार्यात्मक भाषा" (PDF). Retrieved July 11, 2018.
  5. Wingo, Andy (June 29, 2017). "एक नया समवर्ती एमएल". Retrieved July 11, 2018.
  6. Flatt, Matthew; Findler, Robert Bruce (2004). "मार-सुरक्षित तुल्यकालन सार". Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation. 39 (6): 47–58. doi:10.1145/996841.996849. S2CID 5547460.
  7. Reppy, John H. (1993). "Concurrent ML: Design, application and semantics". pp. 165–198. CiteSeerX 10.1.1.50.7965. doi:10.1007/3-540-56883-2_10. ISBN 978-3-540-56883-4. {{cite book}}: |journal= ignored (help); Missing or empty |title= (help)