क्यूनिफॉर्म (प्रोग्रामिंग लैंग्वेज): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Open-source workflow language}} {{Infobox programming language | name = Cuneiform | logo = G18225.png | screenshot...")
 
No edit summary
 
(12 intermediate revisions by 4 users not shown)
Line 26: Line 26:
}}
}}


क्यूनिफ़ॉर्म एक [[खुला स्रोत सॉफ्टवेयर]] है | ओपन-सोर्स [[वैज्ञानिक कार्यप्रवाह प्रणाली]]
'''क्यूनिफॉर्म(प्रोग्रामिंग लैंग्वेज)''' बड़े स्तर पर वैज्ञानिक डेटा विश्लेषण के लिए एक ओपन-सोर्स वर्कफ़्लो लैंग्वेज है।<ref>{{Cite web|url=https://github.com/joergen7/cuneiform|title = Joergen7/Cuneiform|website = [[GitHub]]|date = 14 October 2021}}</ref><ref>{{Cite journal  
बड़े पैमाने पर वैज्ञानिक डेटा विश्लेषण के लिए।<ref>{{Cite web|url=https://github.com/joergen7/cuneiform|title = Joergen7/Cuneiform|website = [[GitHub]]|date = 14 October 2021}}</ref><ref>{{Cite journal  
| last1 = Brandt | first1 = Jörgen  
| last1 = Brandt | first1 = Jörgen  
| last2 = Bux    | first2 = Marc N.  
| last2 = Bux    | first2 = Marc N.  
Line 37: Line 36:
| year = 2015
| year = 2015
| url = http://ceur-ws.org/Vol-1330/paper-03.pdf
| url = http://ceur-ws.org/Vol-1330/paper-03.pdf
}}</ref>
}}</ref> यह पैरलल कंप्यूटिंग को बढ़ावा देने वाली एक स्थिर रूप से प्ररूप की गई फंक्शनल प्रोग्रामिंग लैंग्वेज है। इसमें एक अस्थिर [[विदेशी फ़ंक्शन इंटरफ़ेस|फोरीगन फंक्शन इंटरफ़ेस]] है जो उपयोगकर्ताओं को कई बाहरी प्रोग्रामिंग लैंग्वेज से सॉफ़्टवेयर को एकीकृत करने की अनुमति देता है। संगठनात्मक स्तर पर क्यूनिफॉर्म इसे संरचना-पूर्ण बनाने के लिए [[ सशर्त (कंप्यूटर प्रोग्रामिंग) |कंडीशनल]] ब्रांचिंग और जनरल रिकर्शन जैसी सुविधाएं प्रदान करता है।इसमें, क्यूनिफॉर्म एक फंक्शनल प्रोग्रामिंग लैंग्वेज की व्यापकता की प्रस्तुत करते हुए [[अपाचे टवेर्ना|टवेर्ना(Taverna)]], केएनआईएमई(KNIME), या [[ गैलेक्सी (कम्प्यूटेशनल जीव विज्ञान) |गैलेक्सी(GALAXY)]] जैसे वैज्ञानिक वर्कफ़्लो सिस्टम और मैपरेडूस या [[ सुअर (प्रोग्रामिंग उपकरण) |पिग लैटिन]] जैसे बड़े स्तर पर डेटा विश्लेषण प्रोग्रामिंग मॉडल के बीच अंतर को बंद करने का प्रयास है।
यह एक प्रकार की प्रणाली#STATIC [[कार्यात्मक प्रोग्रामिंग]] है जो [[समानांतर कंप्यूटिंग]] को बढ़ावा देती है। इसमें एक बहुमुखी [[विदेशी फ़ंक्शन इंटरफ़ेस]] है जो उपयोगकर्ताओं को कई बाहरी प्रोग्रामिंग भाषाओं से सॉफ़्टवेयर को एकीकृत करने की अनुमति देता है। संगठनात्मक स्तर पर क्यूनिफॉर्म [[ सशर्त (कंप्यूटर प्रोग्रामिंग) ]] और [[ प्रत्यावर्तन ]] जैसी सुविधाएं प्रदान करता है जो इसे [[ट्यूरिंग पूर्णता]]|ट्यूरिंग-पूर्ण बनाता है। इसमें, क्यूनिफॉर्म एक कार्यात्मकता की व्यापकता की पेशकश करते हुए [[अपाचे टवेर्ना]], केएनआईएमई, या [[ गैलेक्सी (कम्प्यूटेशनल जीव विज्ञान) ]] जैसे वैज्ञानिक वर्कफ़्लो सिस्टम और मैपरेडस या [[ सुअर (प्रोग्रामिंग उपकरण) ]] जैसे बड़े पैमाने पर डेटा विश्लेषण प्रोग्रामिंग मॉडल के बीच अंतर को बंद करने का प्रयास है। प्रोग्रामिंग भाषा।


क्यूनिफॉर्म को वितरित [[एरलांग (प्रोग्रामिंग भाषा)]] में लागू किया गया है। यदि वितरित मोड में चलाया जाता है तो यह [[ चमकीला ]] या सेफ (सॉफ्टवेयर)#CephFS (या किसी अन्य फाइल [[यूजरस्पेस में फाइलसिस्टम]] एकीकरण में एक फाइलसिस्टम, जैसे, [[Apache Hadoop]]#HDFS) जैसे [[POSIX]]-अनुपालक वितरित फ़ाइल सिस्टम को चलाता है। वैकल्पिक रूप से, क्यूनिफ़ॉर्म स्क्रिप्ट को [[HTCondor]] या Apache Hadoop के शीर्ष पर निष्पादित किया जा सकता है।<ref>{{cite web|title=Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience by Jörgen Brandt|url=http://beta.erlangcentral.org/videos/scalable-multi-language-data-analysis-on-beam-the-cuneiform-experience-by-jorgen-brandt/#.WBLlE2hNzIU|website=Erlang Central|access-date=28 October 2016|archive-url=https://web.archive.org/web/20161002222350/http://beta.erlangcentral.org/videos/scalable-multi-language-data-analysis-on-beam-the-cuneiform-experience-by-jorgen-brandt/#.WBLlE2hNzIU|archive-date=2 October 2016|url-status=dead}}</ref><ref>
क्यूनिफॉर्म को डिस्ट्रिब्यूटेड [[एरलांग (प्रोग्रामिंग भाषा)|एरलांग (प्रोग्रामिंग लैंग्वेज)]] में लागू किया गया है। यदि डिस्ट्रिब्यूटेड प्रकार में चलाया जाता है तो यह ग्लोस्टर या सेफ (या किसी अन्य फ़ाइल सिस्टम का एक-रूप होना एकीकरण, (या किसी अन्य फ़ाइल सिस्टम का FUSE एकीकरण, उदाहरण के लिए, HDFS)जैसे POSIX-कंप्लेंट डिस्ट्रिब्यूटेड फ़ाइल सिस्टम को चलाता है। वैकल्पिक रूप से, क्यूनिफ़ॉर्म स्क्रिप्ट(लिपि) को HTCondor या हडूप के शीर्ष पर निष्पादित किया जा सकता है।<ref>{{cite web|title=Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience by Jörgen Brandt|url=http://beta.erlangcentral.org/videos/scalable-multi-language-data-analysis-on-beam-the-cuneiform-experience-by-jorgen-brandt/#.WBLlE2hNzIU|website=Erlang Central|access-date=28 October 2016|archive-url=https://web.archive.org/web/20161002222350/http://beta.erlangcentral.org/videos/scalable-multi-language-data-analysis-on-beam-the-cuneiform-experience-by-jorgen-brandt/#.WBLlE2hNzIU|archive-date=2 October 2016|url-status=dead}}</ref><ref>
{{Cite journal  
{{Cite journal  
| last1 = Bux        | first1 = Marc
| last1 = Bux        | first1 = Marc
Line 84: Line 82:
}}
}}
</ref><ref>{{cite web|title=Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience|url=http://www.erlang-factory.com/euc2016/jorgen-brandt|website=Erlang-factory.com|access-date=28 October 2016}}</ref>
</ref><ref>{{cite web|title=Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience|url=http://www.erlang-factory.com/euc2016/jorgen-brandt|website=Erlang-factory.com|access-date=28 October 2016}}</ref>
क्यूनिफॉर्म पीटर केली के काम से प्रभावित है जो वैज्ञानिक वर्कफ़्लो निष्पादन के लिए एक मॉडल के रूप में कार्यात्मक प्रोग्रामिंग का प्रस्ताव करता है।<ref>{{cite journal
 
क्यूनिफॉर्म पीटर केली के काम से प्रभावित है जो वैज्ञानिक वर्कफ़्लो निष्पादन के लिए एक मॉडल के रूप में फंक्शनल प्रोग्रामिंग का प्रस्ताव करता है।<ref>{{cite journal
| last1 = Kelly      | first1 = Peter M.
| last1 = Kelly      | first1 = Peter M.
| last2 = Coddington | first2 = Paul D.
| last2 = Coddington | first2 = Paul D.
Line 115: Line 114:
| doi  = 10.1016/j.ecoinf.2009.08.008  | s2cid = 16392118 | url  = https://escholarship.org/content/qt2q46n1tp/qt2q46n1tp.pdf?t=nivnuu
| doi  = 10.1016/j.ecoinf.2009.08.008  | s2cid = 16392118 | url  = https://escholarship.org/content/qt2q46n1tp/qt2q46n1tp.pdf?t=nivnuu
}}
}}
</ref>
</ref>इसमें, क्यूनिफ़ॉर्म [[स्विफ्ट (समानांतर स्क्रिप्टिंग भाषा)|तत्पर]] जैसी [[डेटाफ्लो प्रोग्रामिंग]] पर आधारित संबंधित वर्कफ़्लो लैंग्वेज से अलग है।<ref>
इसमें, क्यूनिफ़ॉर्म [[स्विफ्ट (समानांतर स्क्रिप्टिंग भाषा)]] जैसी [[डेटाफ्लो प्रोग्रामिंग]] पर आधारित संबंधित वर्कफ़्लो भाषाओं से अलग है।<ref>
{{cite journal
{{cite journal
| title = Nextflow enables reproducible computational workflows
| title = Nextflow enables reproducible computational workflows
Line 132: Line 130:
| doi = 10.1038/nbt.3820 | pmid = 28398311 | s2cid = 9690740 }}
| doi = 10.1038/nbt.3820 | pmid = 28398311 | s2cid = 9690740 }}
</ref>
</ref>
==बाहरी सॉफ़्टवेयर इंटीग्रेशन(एकीकरण)==


बाहरी उपकरण और लाइब्रेरी (उदाहरण के लिए, [[आर (प्रोग्रामिंग भाषा)|आर]] या [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] लाइब्रेरी) एक फोरीगन फंक्शन इंटरफ़ेस के माध्यम से एकीकृत होते हैं। इसमें यह सदृश है, उदाहरण के लिए, केएनआईएमई जो स्निपेट नोड के माध्यम से बाहरी सॉफ़्टवेयर के उपयोग की अनुमति देता है, या [[अपाचे टवेर्ना|टवेर्ना]] जो [[जावा (प्रोग्रामिंग भाषा)|जावा]] सॉफ़्टवेयर को एकीकृत करने के लिए [[बीनशेल]] सेवाएं प्रदान करता है। किसी कार्य को किसी फोरीगन लैंग्वेज में परिभाषित करके किसी बाहरी उपकरण या लाइब्रेरी के एपीआई(API) का उपयोग करना संभव है। इस तरह, किसी आवरण को लिखने या उपकरण को पुनः लागू करने की आवश्यकता के बिना उपकरण को सीधे एकीकृत किया जा सकता है।<ref>{{cite web|title=एर्लांग में एक कार्यात्मक वर्कफ़्लो भाषा कार्यान्वयन|url=http://www.erlang-factory.com/static/upload/media/1448992381831050cuneiformberlinefl2015.pdf|access-date=28 October 2016}}</ref>


==बाहरी सॉफ़्टवेयर एकीकरण==
वर्तमान में समर्थित फोरीगन प्रोग्रामिंग लैंग्वेज हैं:
 
बाहरी उपकरण और लाइब्रेरी (उदाहरण के लिए, [[आर (प्रोग्रामिंग भाषा)]] या [[पायथन (प्रोग्रामिंग भाषा)]] लाइब्रेरी) एक विदेशी फ़ंक्शन इंटरफ़ेस के माध्यम से एकीकृत होते हैं। इसमें यह सदृश है, उदाहरण के लिए, KNIME जो स्निपेट नोड्स के माध्यम से बाहरी सॉफ़्टवेयर के उपयोग की अनुमति देता है, या Apache Taverna जो [[जावा (प्रोग्रामिंग भाषा)]] सॉफ़्टवेयर को एकीकृत करने के लिए [[बीनशेल]] सेवाएं प्रदान करता है। किसी कार्य को किसी विदेशी भाषा में परिभाषित करके किसी बाहरी टूल या लाइब्रेरी के एपीआई का उपयोग करना संभव है। इस तरह, किसी रैपर को लिखने या टूल को दोबारा लागू करने की आवश्यकता के बिना टूल को सीधे एकीकृत किया जा सकता है।<ref>{{cite web|title=एर्लांग में एक कार्यात्मक वर्कफ़्लो भाषा कार्यान्वयन|url=http://www.erlang-factory.com/static/upload/media/1448992381831050cuneiformberlinefl2015.pdf|access-date=28 October 2016}}</ref>
वर्तमान में समर्थित विदेशी प्रोग्रामिंग भाषाएँ हैं:
{{div col}}
{{div col}}
* [[बैश (यूनिक्स शेल)]]
* [[बैश (Bash)]]
* अमृत (प्रोग्रामिंग भाषा)
* अमृत (Elixir)
* एर्लांग (प्रोग्रामिंग भाषा)
* एर्लांग (Erlang)
* जावा (प्रोग्रामिंग भाषा)
* जावा (JAVA)
* [[जावास्क्रिप्ट]]
* [[जावास्क्रिप्ट]](Javascript)
* [[मतलब]]
* [[मैटलैब]](MATLAB)
* [[जीएनयू ऑक्टेव]]
* [[जीएनयू ऑक्टेव]](Gnu Octave)
*[[पर्ल]]
*[[पर्ल]](Perl)
* पायथन (प्रोग्रामिंग भाषा)
* पायथन (Python)
* आर (प्रोग्रामिंग भाषा)
* आर (R)
* [[रैकेट (प्रोग्रामिंग भाषा)]]
* [[रैकेट (Racket)]]
{{div col end}}
{{div col end}}
[[AWK]] और [[gnuplot]] के लिए विदेशी भाषा समर्थन नियोजित परिवर्धन है।
[[AWK]](ऑक) और [[gnuplot]](गनप्लेट) के लिए फोरीगन लैंग्वेज समर्थन नियोजित परिवर्धन है।


==सिस्टम टाइप करें==
==सिस्टम प्ररूप करें==


क्यूनिफ़ॉर्म एक सरल, सांख्यिकीय रूप से जांची गई प्रकार की प्रणाली प्रदान करता है।<ref>
क्यूनिफ़ॉर्म एक सरल, सांख्यिकीय रूप से जांची गई प्रकार की सिस्टम प्रदान करता है।<ref>
{{ cite journal
{{ cite journal
| title = Computation semantics of the functional scientific workflow language Cuneiform
| title = Computation semantics of the functional scientific workflow language Cuneiform
Line 165: Line 162:
| year = 2017
| year = 2017
| doi = 10.1017/S0956796817000119 | s2cid = 6128299 }}
| doi = 10.1017/S0956796817000119 | s2cid = 6128299 }}
</ref> जबकि क्यूनिफ़ॉर्म सूचियाँ [[मिश्रित डेटा प्रकार]]ों के रूप में प्रदान करता है, यह रनटाइम त्रुटियों की संभावना से बचने के लिए पारंपरिक सूची एक्सेसर्स (हेड और टेल) को छोड़ देता है जो खाली सूची तक पहुँचने पर उत्पन्न हो सकती हैं। इसके बजाय सूचियों को केवल मैपिंग या फोल्डिंग द्वारा ऑल-ऑर-नथिंग फैशन में एक्सेस किया जाता है। इसके अतिरिक्त, क्यूनिफॉर्म (संगठनात्मक स्तर पर) अंकगणित को छोड़ देता है जो शून्य से विभाजन की संभावना को बाहर कर देता है। किसी भी आंशिक रूप से परिभाषित ऑपरेशन की चूक यह गारंटी देती है कि रनटाइम त्रुटियां विशेष रूप से विदेशी कोड में उत्पन्न हो सकती हैं।
</ref> जबकि क्यूनिफ़ॉर्म लिस्ट्स [[मिश्रित डेटा प्रकार|मिश्रित डेटा प्रकारो]] के रूप में प्रदान करता है, यह क्रम त्रुटियों की संभावना से बचने के लिए पारंपरिक लिस्ट पहुंचकर्ता (हेड और टेल) को छोड़ देता है जो खाली लिस्ट तक पहुँचने पर उत्पन्न हो सकती हैं। इसके स्थान पर लिस्ट्सको केवल प्रतिचित्रण या वलन द्वारा सभी या कुछ भी नहीं व्यवहार में प्रवेश किया जाता है। इसके अतिरिक्त, क्यूनिफॉर्म (संगठनात्मक स्तर पर) अंकगणित को छोड़ देता है जो शून्य से विभाजन की संभावना को बाहर कर देता है। किसी भी आंशिक रूप से परिभाषित संचालन की चूक यह आश्वासन देती है कि क्रम त्रुटियां विशेष रूप से फोरीगन कोड में उत्पन्न हो सकती हैं।


===आधार डेटा प्रकार===
===आधार डेटा प्रकार===


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


===रिकॉर्ड और पैटर्न मिलान===
===रिकार्ड्स और पैटर्न मिलान===


क्यूनिफॉर्म यौगिक डेटा प्रकारों के रूप में रिकॉर्ड_(कंप्यूटर_साइंस)एस (स्ट्रक्चर) प्रदान करता है। नीचे दिया गया उदाहरण एक वेरिएबल की परिभाषा दिखाता है <code>r</code> दो क्षेत्रों के साथ एक रिकॉर्ड होना <code>a1</code> और <code>a2</code>, पहला एक स्ट्रिंग है और दूसरा एक बूलियन है।
क्यूनिफॉर्म यौगिक डेटा प्रकारों के रूप में रिकार्ड्स(संरचनाएं) प्रदान करता है। नीचे दिया गया उदाहरण एक वेरिएबल <code>r</code> दिखाता है जो दो क्षेत्रों a1 और a2 के साथ एक रिकार्ड्स है, पहला एक स्ट्रिंग है और दूसरा एक बूलियन है।


<syntaxhighlight lang="swift">
<syntaxhighlight lang="swift">
Line 179: Line 176:
   <a1 = "my string", a2 = true>;
   <a1 = "my string", a2 = true>;
</syntaxhighlight>
</syntaxhighlight>
रिकॉर्ड्स को प्रक्षेपण के माध्यम से या [[पैटर्न मिलान]] के माध्यम से एक्सेस किया जा सकता है। नीचे दिया गया उदाहरण दो फ़ील्ड निकालता है <code>a1</code> और <code>a2</code> रिकॉर्ड से <code>r</code>.
रिकार्ड्स् को प्रक्षेपण के माध्यम से या [[पैटर्न मिलान]] के माध्यम से अभिगम किया जा सकता है। नीचे दिया गया उदाहरण रिकार्ड्स r से दो क्षेत्रों a1 और a2 निकालता है।


<syntaxhighlight lang="swift">
<syntaxhighlight lang="swift">
Line 187: Line 184:
</syntaxhighlight>
</syntaxhighlight>


===लिस्ट्स और लिस्ट प्रोसेसिंग===


===सूचियाँ और सूची प्रसंस्करण===
इसके अतिरिक्त, क्यूनिफ़ॉर्म मिश्रित डेटा प्रकारों के रूप में लिस्ट्स प्रदान करता है। नीचे दिया गया उदाहरण तीन लिस्टों वाली एक फ़ाइल लिस्ट के रूप में एक वेरिएबल xs की परिभाषा दिखाता है
 
इसके अलावा, क्यूनिफ़ॉर्म मिश्रित डेटा प्रकारों के रूप में सूचियाँ प्रदान करता है। नीचे दिया गया उदाहरण एक वेरिएबल की परिभाषा दिखाता है <code>xs</code> तीन तत्वों वाली एक फ़ाइल सूची होना।


<syntaxhighlight lang="erlang">
<syntaxhighlight lang="erlang">
Line 196: Line 192:
   ['a.txt', 'b.txt', 'c.txt' : File];
   ['a.txt', 'b.txt', 'c.txt' : File];
</syntaxhighlight>
</syntaxhighlight>
सूचियों को फॉर और फोल्ड ऑपरेटरों के साथ संसाधित किया जा सकता है। इसमें, तत्व-वार सूची का उपभोग करने के लिए ऑपरेटर को कई सूचियाँ दी जा सकती हैं (समान)। <code>for/list</code> रैकेट (प्रोग्रामिंग भाषा) में, <code>mapcar</code> [[सामान्य लिस्प]] में या <code>zipwith</code> एर्लांग (प्रोग्रामिंग भाषा) में)।
लिस्ट्सको <code>for</code> और फोल्ड संक्रियक के साथ संसाधित किया जा सकता है। इसमें, लिस्ट-वार लिस्ट का उपभोग करने के लिए संक्रियक को कई लिस्ट्स दी जा सकती हैं (समान)।  


नीचे दिया गया उदाहरण दिखाता है कि किसी एकल सूची को कैसे मैप किया जाए, परिणाम एक फ़ाइल सूची होगी।
<code>for/list</code> रैकेट (प्रोग्रामिंग लैंग्वेज) में, <code>mapcar</code> [[सामान्य लिस्प]] में या <code>zipwith</code> एर्लांग (प्रोग्रामिंग लैंग्वेज) में)।
 
नीचे दिया गया उदाहरण दिखाता है कि किसी एकल लिस्ट को कैसे आलेख्यपत्र किया जाए, परिणाम एक फ़ाइल लिस्ट होगी।


<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
Line 206: Line 204:
end;
end;
</syntaxhighlight>
</syntaxhighlight>
नीचे दिया गया उदाहरण दिखाता है कि दो सूचियों को कैसे ज़िप किया जाए, जिसके परिणामस्वरूप फ़ाइल सूची भी बन जाएगी।
नीचे दिया गया उदाहरण दिखाता है कि दो लिस्ट्स को कैसे संकुचित किया जाए, जिसके परिणामस्वरूप फ़ाइल लिस्ट भी बन जाएगी।


<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
Line 214: Line 212:
end;
end;
</syntaxhighlight>
</syntaxhighlight>
अंत में, फोल्ड ऑपरेटर का उपयोग करके सूचियों को एकत्रित किया जा सकता है। निम्नलिखित उदाहरण किसी सूची के तत्वों का सार प्रस्तुत करता है।
अंत में, फोल्ड संक्रियक का उपयोग करके लिस्ट्सको एकत्रित किया जा सकता है। निम्नलिखित उदाहरण किसी लिस्ट के लिस्टों का सार प्रस्तुत करता है।


<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
Line 221: Line 219:
   end;
   end;
</syntaxhighlight>
</syntaxhighlight>


==समानांतर निष्पादन==
==समानांतर निष्पादन==


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


उदाहरण के लिए, निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम अनुप्रयोगों की अनुमति देता है <code>f</code> और <code>g</code> जबकि समानांतर में चलाने के लिए <code>h</code> निर्भर है और इसे तभी शुरू किया जा सकता है जब दोनों हों <code>f</code> और <code>g</code> समाप्त हो गया है।
उदाहरण के लिए, निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम <code>f</code> और <code>g</code> के अनुप्रयोगों को समानांतर में चलने की अनुमति देता है जबकि <code>h</code> निर्भर है और इसे केवल तभी प्रारम्भ किया जा सकता है जब<code>f</code> और <code>g</code> दोनों समाप्त हो जाएं।


{{pre|1=
{{pre|1=
Line 236: Line 233:
}}
}}


निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम फ़ंक्शन के तीन समानांतर अनुप्रयोग बनाता है <code>f</code> मानचित्रण द्वारा <code>f</code> तीन-तत्व सूची पर:
निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम फलन तीन-लिस्ट लिस्ट पर <code>f</code> को आलेख्यपत्र करके फलन <code>f</code> के तीन समानांतर अनुप्रयोग बनाता है


{{pre|1=
{{pre|1=
Line 248: Line 245:
}}
}}


इसी प्रकार, के अनुप्रयोग <code>f</code> और <code>g</code> अभिलेख के निर्माण में स्वतंत्र हैं <code>r</code> और, इस प्रकार, समानांतर में चलाया जा सकता है:
इसी प्रकार, रिकार्ड्स <code>r</code> के निर्माण में <code>f</code> और <code>g</code> के अनुप्रयोग स्वतंत्र हैं और, इस प्रकार, समानांतर में चलाया जा सकता है:


{{sxhl|lang=erlang|1=
{{sxhl|lang=erlang|1=
Line 257: Line 254:
==उदाहरण==
==उदाहरण==


एक हैलो-वर्ल्ड स्क्रिप्ट:
एक हैलो-वर्ल्ड स्क्रिप्ट
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
def greet( person : Str ) -> <out : Str>
def greet( person : Str ) -> <out : Str>
Line 266: Line 263:
( greet( person = "world" )|out );
( greet( person = "world" )|out );
</syntaxhighlight>
</syntaxhighlight>
यह स्क्रिप्ट किसी कार्य को परिभाषित करती है <code>greet</code> बैश (यूनिक्स शेल) में जो पहले से जुड़ता है <code>"Hello "</code> इसके स्ट्रिंग तर्क के लिए <code>person</code>.
यह स्क्रिप्ट बैश में एक टास्क <code>greet</code> को परिभाषित करती है जो इसके स्ट्रिंग तर्क के साथ <code>"Hello</code>" जोड़ता है। फलन एकल स्ट्रिंग क्षेत्रों के साथ एक रिकार्ड्स तैयार करता है। <code>greet</code> लागू करने पर, तर्क करने वाले <code>person</code> को स्ट्रिंग "<code>world"</code> से बांधने से रिकार्ड्स <code><out = "Hello world"></code> बनता है। इस रिकार्ड्स को इसके क्षेत्र में प्रक्षेपित करने से स्ट्रिंग "<code>Hello world"</code> का मूल्यांकन होता है।
फ़ंक्शन एकल स्ट्रिंग फ़ील्ड के साथ एक रिकॉर्ड तैयार करता है <code>out</code>.
को लागू करने <code>greet</code>, तर्क को बांधना <code>person</code> स्ट्रिंग के लिए <code>"world"</code> रिकार्ड तैयार करता है <code><out = "Hello world"></code>. इस रिकॉर्ड को अपने क्षेत्र में प्रक्षेपित करना <code>out</code> स्ट्रिंग का मूल्यांकन करता है <code>"Hello world"</code>.


बैश (यूनिक्स शेल) में किसी कार्य को परिभाषित करके कमांड लाइन टूल को एकीकृत किया जा सकता है:
बैश में किसी कार्य को परिभाषित करके कमांड लाइन उपकरण को एकीकृत किया जा सकता है:
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
def samtoolsSort( bam : File ) -> <sorted : File>
def samtoolsSort( bam : File ) -> <sorted : File>
Line 278: Line 273:
}*
}*
</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण में एक कार्य <code>samtoolsSort</code> परिभाषित किया गया।
इस उदाहरण में एक कार्य <code>samtoolsSort</code> परिभाषित किया गया है। यह उपकरण [[SAMtools]](समतूल) को कॉल करता है, इनपुट फ़ाइल का उपभोग करता है, बाम(BAM) प्रारूप में, और एक क्रमबद्ध आउटपुट फ़ाइल का उत्पादन भी बाम(BAM) प्रारूप में करता है।
यह टूल [[SAMtools]] को कॉल करता है, एक इनपुट फ़ाइल का उपभोग करता है, BAM प्रारूप में, और एक क्रमबद्ध आउटपुट फ़ाइल का उत्पादन करता है, वह भी BAM प्रारूप में।


==रिलीज़ इतिहास==
==प्रकाशित इतिहास==


{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Appearance !! Implementation Language !! Distribution Platform !! Foreign Languages
! संस्करण !! उपस्थिति !! कार्यान्वयन लैंग्वेज !! वितरण मंच !! फोरीगन लैंग्वेज
|-
|-
! 1.0.0
! 1.0.0
| May 2014
| May 2014
| [[Java (programming language)|Java]]
| [[Java (programming language)|जावा]]
| [[Apache Hadoop]]
| [[Apache Hadoop|अपाचे हडूप]]
| Bash, Common Lisp, GNU Octave, Perl, Python, R, Scala
| बैश, कॉमन लिसप, जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला
|-
|-
! 2.0.x
! 2.0.x
| Mar. 2015
| Mar. 2015
| [[Java (programming language)|Java]]
| [[Java (programming language)|जावा]]
| [[HTCondor]], [[Apache Hadoop]]
| [[HTCondor|एच्टीकोंडोर]], [[Apache Hadoop|अपाचे हडूप]]
| Bash, BeanShell, Common Lisp, MATLAB, GNU Octave, Perl, Python, R, Scala
| बैश, बीन शैल, कॉमन लिसप, मैटलैब , जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला
|-
|-
! 2.2.x
! 2.2.x
| Apr. 2016
| Apr. 2016
| [[Erlang (programming language)|Erlang]]
| [[Erlang (programming language)|एर्लांग]]
| [[HTCondor]], [[Apache Hadoop]]
| [[HTCondor|एच्टीकोंडोर]], [[Apache Hadoop|अपाचे हडूप]]
| Bash, Perl, Python, R
| बैश, पर्ल, पाइथन, आर
|-
|-
! 3.0.x
! 3.0.x
| Feb. 2018
| Feb. 2018
| [[Erlang (programming language)|Erlang]]
| [[Erlang (programming language)|एर्लांग]]
| Distributed Erlang
| डिस्ट्रिब्यूटेड एर्लांग
| Bash, Erlang, Java, MATLAB, GNU Octave, Perl, Python, R, Racket
| बैश, एर्लांग, जावा, मैटलैब , जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला, Racket
|}
|}
अप्रैल 2016 में, क्यूनिफ़ॉर्म की कार्यान्वयन भाषा जावा (प्रोग्रामिंग भाषा) से एर्लांग (प्रोग्रामिंग भाषा) में बदल गई और, फरवरी 2018 में, इसका प्रमुख वितरित निष्पादन प्लेटफ़ॉर्म Hadoop से वितरित एर्लांग में बदल गया। इसके अतिरिक्त, 2015 से 2018 तक HTCondor को एक वैकल्पिक निष्पादन मंच के रूप में बनाए रखा गया था।
अप्रैल 2016 में, क्यूनिफ़ॉर्म की कार्यान्वयन लैंग्वेज जावा से एर्लांग में बदल गई और, फरवरी 2018 में, इसका प्रमुख डिस्ट्रिब्यूटेड निष्पादन प्लेटफ़ॉर्म हडूप से डिस्ट्रिब्यूटेड एर्लांग में बदल गया। इसके अतिरिक्त, 2015 से 2018 तक HTCondor([[HTCondor|एच्टीकोंडोर]]) को एक वैकल्पिक निष्पादन मंच के रूप में बनाए रखा गया था।


क्यूनिफॉर्म की सतह वाक्यविन्यास को दो बार संशोधित किया गया था, जैसा कि प्रमुख संस्करण संख्या में दर्शाया गया है।
क्यूनिफॉर्म की सतह वाक्यविन्यास को दो बार संशोधित किया गया था, जैसा कि प्रमुख संस्करण संख्या में दर्शाया गया है।
Line 317: Line 311:
===संस्करण 1===
===संस्करण 1===


मई 2014 में प्रकाशित अपने पहले ड्राफ्ट में, क्यूनिफ़ॉर्म मेक (सॉफ़्टवेयर) से निकटता से संबंधित था, जिसमें उसने एक स्थिर डेटा निर्भरता ग्राफ़ का निर्माण किया था जिसे दुभाषिया ने निष्पादन के दौरान ट्रेस किया था। बाद के संस्करणों में मुख्य अंतर सशर्त, पुनरावर्तन, या स्थैतिक प्रकार की जाँच की कमी थी। टिल्ड के साथ एकल-उद्धृत स्ट्रिंग मानों को जोड़कर फ़ाइलों को स्ट्रिंग्स से अलग किया गया था <code>~</code>. स्क्रिप्ट की क्वेरी अभिव्यक्ति को इसके साथ पेश किया गया था <code>target</code> कीवर्ड. बैश डिफ़ॉल्ट विदेशी भाषा थी. फ़ंक्शन एप्लिकेशन को एक का उपयोग करके निष्पादित किया जाना था <code>apply</code> रूप जो लिया <code>task</code> इसके पहले कीवर्ड तर्क के रूप में। एक साल बाद, इस सतह सिंटैक्स को एक सुव्यवस्थित लेकिन समान संस्करण द्वारा बदल दिया गया।
मई 2014 में प्रकाशित अपने पहले प्रारूप में, क्यूनिफ़ॉर्म मेक (सॉफ़्टवेयर) से निकटता से संबंधित था, जिसमें उसने एक स्थिर डेटा निर्भरता ग्राफ़ का निर्माण किया था जिसे व्याख्याता ने निष्पादन के समय ट्रेस किया था। बाद के संस्करणों में मुख्य अंतर सनियम, पुनरावर्तन, या स्थैतिक प्रकार की जाँच की कमी थी। टिल्ड <code>~</code> के साथ एकल-उद्धृत स्ट्रिंग मानों को जोड़कर फ़ाइलों को स्ट्रिंग्स से अलग किया गया था। स्क्रिप्ट की क्वेरी अभिव्यक्ति को <code>target</code> कीवर्ड के साथ प्रस्तुत किया गया था। बैश डिफ़ॉल्ट फोरीगन लैंग्वेज थी. फलन एप्लिकेशन को एक <code>apply</code> फॉर्म का उपयोग करके निष्पादित किया जाना था  जिसने <code>task</code>पहले कीवर्ड तर्क के रूप में। एक साल बाद, इस सतह वाक्य - विन्यास को एक सुव्यवस्थित लेकिन समान संस्करण द्वारा बदल दिया गया।
 
निम्न उदाहरण स्क्रिप्ट एक FTP सर्वर से एक संदर्भ जीनोम डाउनलोड करती है।
 
<पूर्व>
डाउनलोड-रेफ-जीनोम घोषित करें;
 
डेफ़टास्क डाउनलोड-एफए (एफए: ~ पथ ~ आईडी) * {
    wget $path/$id.fa.gz
    गनज़िप $id.fa.gz
    एमवी $id.fa $fa
}*
 
रेफरी-जीनोम-पथ = ~'ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes';
रेफरी-जीनोम-आईडी = ~'chr22';


रेफरी-जीनोम = लागू करें(
निम्न उदाहरण स्क्रिप्ट एक FTP (एफटीपि)सर्वर से एक संदर्भ जीनोम डाउनलोड करती है।
    कार्य : डाउनलोड-एफए
  declare download-ref-genome;
    पथ: रेफरी-जीनोम-पथ
    आईडी: रेफरी-जीनोम-आईडी
);


लक्ष्य रेफरी-जीनोम;
deftask download-fa( fa : ~path ~id ) *{
</पूर्व>
    wget $path/$id.fa.gz
    gunzip $id.fa.gz
    mv $id.fa $fa
}*
ref-genome-path = ~'<nowiki>ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes'</nowiki>;
ref-genome-id = ~'chr22';
ref-genome = apply(
    task : download-fa
    path : ref-genome-path
    id : ref-genome-id
);
target ref-genome;


===संस्करण 2===
===संस्करण 2===


[[File:Cf screenshot.jpg|thumb|क्यूनिफॉर्म 2.0.3 के लिए स्विंग-आधारित संपादक और आरईपीएल]]क्यूनिफॉर्म सतह वाक्यविन्यास का दूसरा मसौदा, पहली बार मार्च 2015 में प्रकाशित हुआ, क्यूनिफॉर्म की कार्यान्वयन भाषा के रूप में जावा से एरलांग में संक्रमण के बाद तीन वर्षों तक उपयोग में रहा। मूल्यांकन पहले के तरीकों से अलग है जिसमें दुभाषिया एक स्थिर ग्राफ़ को पार करने के बजाय एक क्वेरी अभिव्यक्ति को कम कर देता है। जिस समय सतही वाक्यविन्यास उपयोग में रहा, उस दौरान दुभाषिया को औपचारिक रूप दिया गया और सरलीकृत किया गया, जिसके परिणामस्वरूप क्यूनिफॉर्म के शब्दार्थ का पहला विवरण सामने आया। वाक्यविन्यास में सशर्त विशेषताएँ थीं। हालाँकि, बूलियन्स को सूचियों के रूप में एन्कोड किया गया था, खाली सूची को बूलियन गलत के रूप में और गैर-रिक्त सूची को बूलियन सत्य के रूप में पुनर्चक्रित किया गया था। पुनरावर्तन को बाद में औपचारिकता के उपोत्पाद के रूप में जोड़ा गया। हालाँकि, स्थैतिक प्रकार की जाँच केवल संस्करण 3 में शुरू की गई थी।
[[File:Cf screenshot.jpg|thumb|क्यूनिफॉर्म 2.0.3 के लिए स्विंग-आधारित संपादक और आरईपीएल]]क्यूनिफॉर्म सतह वाक्यविन्यास का दूसरा प्रारूप, पहली बार मार्च 2015 में प्रकाशित हुआ, क्यूनिफॉर्म की कार्यान्वयन लैंग्वेज के रूप में जावा से एरलांग में परिवर्तनकाल के बाद तीन वर्षों तक उपयोग में रहा। मूल्यांकन पहले के तरीकों से अलग है जिसमें व्याख्याता एक स्थिर ग्राफ़ को पार करने के स्थान पर एक क्वेरी अभिव्यक्ति को कम कर देता है। जिस समय सतही वाक्यविन्यास उपयोग में रहा, उस समय व्याख्याता को औपचारिक रूप दिया गया और सरलीकृत किया गया, जिसके परिणामस्वरूप क्यूनिफॉर्म के शब्दार्थ का पहला विवरण सामने आया। वाक्यविन्यास में सनियम विशेषताएँ थीं। यद्यपि, बूलियन्स को लिस्ट्सके रूप में एन्कोड(कूटलेखन) किया गया था, खाली लिस्ट को बूलियन गलत के रूप में और अतिरिक्त-रिक्त लिस्ट को बूलियन सत्य के रूप में पुनर्चक्रित किया गया था। पुनरावर्तन को बाद में औपचारिकता के उपोत्पाद के रूप में जोड़ा गया। यद्यपि, स्थैतिक प्रकार की जाँच केवल संस्करण 3 में प्रारम्भ की गई थी।
 
निम्न स्क्रिप्ट एक ज़िपित फ़ाइल को विघटित करती है और इसे समान आकार के विभाजनों में विभाजित करती है।
 
<पूर्व>
डिफ़टास्क अनज़िप (<आउट (फ़ाइल)>: ज़िप (फ़ाइल)) बैश में * {
  अनज़िप -d dir $zip
  आउट=`एलएस डीआईआर | awk '{print dir/ $0}'`
}*
 
डेफ़टास्क स्प्लिट (<आउट (फ़ाइल)>: फ़ाइल (फ़ाइल)) बैश में * {
  स्प्लिट -एल 1024 $फ़ाइल txt
  आउट=txt*
}*


sotu = sotu/stateoftheunion1790-2014.txt.zip;
निम्न स्क्रिप्ट एक ज़िप्पड(Zipped) फ़ाइल को विघटित करती है और इसे समान आकार के विभाजनों में विभाजित करती है।
फ़ाइलएलएसटी = विभाजित(फ़ाइल: अनज़िप(ज़िप: सोटू));
  deftask unzip( <out( File )> : zip( File ) ) in bash *{


फ़ाइलLst;
  unzip -d dir $zip
</पूर्व>
  out=`ls dir | awk '{print "dir/" $0}'`
}*
deftask split( <out( File )> : file( File ) ) in bash *{
  split -l 1024 $file txt
  out=txt*
}*
sotu = "sotu/stateoftheunion1790-2014.txt.zip";
fileLst = split( file: unzip( zip: sotu ) );
fileLst;


===संस्करण 3===
===संस्करण 3===


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


निम्न स्क्रिप्ट एक फ़ाइल को अनटार्स करती है जिसके परिणामस्वरूप एक फ़ाइल सूची बनती है।
निम्न स्क्रिप्ट एक फ़ाइल को अनटार्स करती है जिसके परिणामस्वरूप एक फ़ाइल लिस्ट बनती है।
  def untar( tar : File ) -> <fileLst : [File]>


<पूर्व>
in Bash *{
def untar( tar : File ) -> <fileLst : [File]>
  tar xf $tar
बैश में *{
  fileLst=`tar tf $tar`
  टार एक्सएफ $टार
}*
  फ़ाइलएलएसटी=`टार टीएफ $टार`
}*
let hg38Tar : File =
 
  'hg38/hg38.tar';
चलो hg38Tar : फ़ाइल =
  'hg38/hg38.tar';
let <fileLst = faLst : [File]> =
 
  untar( tar = hg38Tar );
चलो <fileLst = faLst : [फ़ाइल]> =
  अनटार(टार = hg38टार);
faLst;
 
faLst;
</पूर्व>


==संदर्भ==
==संदर्भ==
{{Reflist|30em}}
{{Reflist|30em}}
[[Category: प्रोग्रामिंग भाषा]] [[Category: कार्यप्रवाह भाषाएँ]] [[Category: कार्यात्मक भाषाएँ]] [[Category: स्क्रिप्टिंग भाषाएँ]] [[Category: लिनक्स प्रोग्रामिंग उपकरण]] [[Category: Hadoop]] [[Category: स्थिर रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] [[Category: क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर]]


[[Category: Machine Translated Page]]
[[Category:Created On 09/07/2023]]
[[Category:Created On 09/07/2023]]
[[Category:Hadoop]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Multi-column templates]]
[[Category:Pages using div col with small parameter]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Templates using under-protected Lua modules]]
[[Category:Wikipedia fully protected templates|Div col]]
[[Category:कार्यप्रवाह भाषाएँ]]
[[Category:कार्यात्मक भाषाएँ]]
[[Category:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर]]
[[Category:प्रोग्रामिंग भाषा]]
[[Category:लिनक्स प्रोग्रामिंग उपकरण]]
[[Category:स्क्रिप्टिंग भाषाएँ]]
[[Category:स्थिर रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]

Latest revision as of 06:50, 1 August 2023

Cuneiform
G18225.png
Cf screenshot.jpg
Paradigmfunctional, scientific workflow
द्वारा डिज़ाइन किया गयाJörgen Brandt
पहली प्रस्तुति2013
Stable release
3.0.4 / November 19, 2018 (2018-11-19)
टाइपिंग अनुशासनstatic, simple types
कार्यान्वयन भाषाErlang
ओएसLinux, Mac OS
लाइसेंसApache License 2.0
फ़ाइल नाम एक्सटेंशनएस.cfl
वेबसाइटcuneiform-lang.org
Influenced by
Swift (parallel scripting language)

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

क्यूनिफॉर्म को डिस्ट्रिब्यूटेड एरलांग (प्रोग्रामिंग लैंग्वेज) में लागू किया गया है। यदि डिस्ट्रिब्यूटेड प्रकार में चलाया जाता है तो यह ग्लोस्टर या सेफ (या किसी अन्य फ़ाइल सिस्टम का एक-रूप होना एकीकरण, (या किसी अन्य फ़ाइल सिस्टम का FUSE एकीकरण, उदाहरण के लिए, HDFS)जैसे POSIX-कंप्लेंट डिस्ट्रिब्यूटेड फ़ाइल सिस्टम को चलाता है। वैकल्पिक रूप से, क्यूनिफ़ॉर्म स्क्रिप्ट(लिपि) को HTCondor या हडूप के शीर्ष पर निष्पादित किया जा सकता है।[3][4][5][6]

क्यूनिफॉर्म पीटर केली के काम से प्रभावित है जो वैज्ञानिक वर्कफ़्लो निष्पादन के लिए एक मॉडल के रूप में फंक्शनल प्रोग्रामिंग का प्रस्ताव करता है।[7][8]इसमें, क्यूनिफ़ॉर्म तत्पर जैसी डेटाफ्लो प्रोग्रामिंग पर आधारित संबंधित वर्कफ़्लो लैंग्वेज से अलग है।[9]

बाहरी सॉफ़्टवेयर इंटीग्रेशन(एकीकरण)

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

वर्तमान में समर्थित फोरीगन प्रोग्रामिंग लैंग्वेज हैं:

AWK(ऑक) और gnuplot(गनप्लेट) के लिए फोरीगन लैंग्वेज समर्थन नियोजित परिवर्धन है।

सिस्टम प्ररूप करें

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

आधार डेटा प्रकार

आधार डेटा प्रकार के रूप में क्यूनिफॉर्म बूलियन्स, स्ट्रिंग्स और फ़ाइलें प्रदान करता है। इसमें, फ़ाइलों का उपयोग फोरीगन कार्यों के बीच आर्बिटरी प्रारूप में डेटा का आदान-प्रदान करने के लिए किया जाता है।

रिकार्ड्स और पैटर्न मिलान

क्यूनिफॉर्म यौगिक डेटा प्रकारों के रूप में रिकार्ड्स(संरचनाएं) प्रदान करता है। नीचे दिया गया उदाहरण एक वेरिएबल r दिखाता है जो दो क्षेत्रों a1 और a2 के साथ एक रिकार्ड्स है, पहला एक स्ट्रिंग है और दूसरा एक बूलियन है।

let r : <a1 : Str, a2 : Bool> =
  <a1 = "my string", a2 = true>;

रिकार्ड्स् को प्रक्षेपण के माध्यम से या पैटर्न मिलान के माध्यम से अभिगम किया जा सकता है। नीचे दिया गया उदाहरण रिकार्ड्स r से दो क्षेत्रों a1 और a2 निकालता है।

let a1 : Str = ( r|a1 );

let <a2 = a2 : Bool> = r;

लिस्ट्स और लिस्ट प्रोसेसिंग

इसके अतिरिक्त, क्यूनिफ़ॉर्म मिश्रित डेटा प्रकारों के रूप में लिस्ट्स प्रदान करता है। नीचे दिया गया उदाहरण तीन लिस्टों वाली एक फ़ाइल लिस्ट के रूप में एक वेरिएबल xs की परिभाषा दिखाता है

let xs : [File] =
  ['a.txt', 'b.txt', 'c.txt' : File];

लिस्ट्सको for और फोल्ड संक्रियक के साथ संसाधित किया जा सकता है। इसमें, लिस्ट-वार लिस्ट का उपभोग करने के लिए संक्रियक को कई लिस्ट्स दी जा सकती हैं (समान)।

for/list रैकेट (प्रोग्रामिंग लैंग्वेज) में, mapcar सामान्य लिस्प में या zipwith एर्लांग (प्रोग्रामिंग लैंग्वेज) में)।

नीचे दिया गया उदाहरण दिखाता है कि किसी एकल लिस्ट को कैसे आलेख्यपत्र किया जाए, परिणाम एक फ़ाइल लिस्ट होगी।

for x <- xs do
  process-one( arg1 = x )
  : File
end;

नीचे दिया गया उदाहरण दिखाता है कि दो लिस्ट्स को कैसे संकुचित किया जाए, जिसके परिणामस्वरूप फ़ाइल लिस्ट भी बन जाएगी।

for x <- xs, y <- ys do
  process-two( arg1 = x, arg2 = y )
  : File
end;

अंत में, फोल्ड संक्रियक का उपयोग करके लिस्ट्सको एकत्रित किया जा सकता है। निम्नलिखित उदाहरण किसी लिस्ट के लिस्टों का सार प्रस्तुत करता है।

  fold acc = 0, x <- xs do
    add( a = acc, b = x )
  end;

समानांतर निष्पादन

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

उदाहरण के लिए, निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम f और g के अनुप्रयोगों को समानांतर में चलने की अनुमति देता है जबकि h निर्भर है और इसे केवल तभी प्रारम्भ किया जा सकता है जबf और g दोनों समाप्त हो जाएं।

let output-of-f : File = f();
let output-of-g : File = g();

h( f = output-of-f, g = output-of-g );

निम्नलिखित क्यूनिफ़ॉर्म प्रोग्राम फलन तीन-लिस्ट लिस्ट पर f को आलेख्यपत्र करके फलन f के तीन समानांतर अनुप्रयोग बनाता है

let xs : [File] =
  ['a.txt', 'b.txt', 'c.txt' : File];

for x <- xs do
  f( x = x )
  : File
end;

इसी प्रकार, रिकार्ड्स r के निर्माण में f और g के अनुप्रयोग स्वतंत्र हैं और, इस प्रकार, समानांतर में चलाया जा सकता है:

let r : <a : File, b : File> =
  &lt;a = f(), b = g()&gt;;

उदाहरण

एक हैलो-वर्ल्ड स्क्रिप्ट

def greet( person : Str ) -> <out : Str>
in Bash *{
  out="Hello $person"
}*

( greet( person = "world" )|out );

यह स्क्रिप्ट बैश में एक टास्क greet को परिभाषित करती है जो इसके स्ट्रिंग तर्क के साथ "Hello" जोड़ता है। फलन एकल स्ट्रिंग क्षेत्रों के साथ एक रिकार्ड्स तैयार करता है। greet लागू करने पर, तर्क करने वाले person को स्ट्रिंग "world" से बांधने से रिकार्ड्स <out = "Hello world"> बनता है। इस रिकार्ड्स को इसके क्षेत्र में प्रक्षेपित करने से स्ट्रिंग "Hello world" का मूल्यांकन होता है।

बैश में किसी कार्य को परिभाषित करके कमांड लाइन उपकरण को एकीकृत किया जा सकता है:

def samtoolsSort( bam : File ) -> <sorted : File>
in Bash *{
  sorted=sorted.bam
  samtools sort -m 2G $bam -o $sorted
}*

इस उदाहरण में एक कार्य samtoolsSort परिभाषित किया गया है। यह उपकरण SAMtools(समतूल) को कॉल करता है, इनपुट फ़ाइल का उपभोग करता है, बाम(BAM) प्रारूप में, और एक क्रमबद्ध आउटपुट फ़ाइल का उत्पादन भी बाम(BAM) प्रारूप में करता है।

प्रकाशित इतिहास

संस्करण उपस्थिति कार्यान्वयन लैंग्वेज वितरण मंच फोरीगन लैंग्वेज
1.0.0 May 2014 जावा अपाचे हडूप बैश, कॉमन लिसप, जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला
2.0.x Mar. 2015 जावा एच्टीकोंडोर, अपाचे हडूप बैश, बीन शैल, कॉमन लिसप, मैटलैब , जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला
2.2.x Apr. 2016 एर्लांग एच्टीकोंडोर, अपाचे हडूप बैश, पर्ल, पाइथन, आर
3.0.x Feb. 2018 एर्लांग डिस्ट्रिब्यूटेड एर्लांग बैश, एर्लांग, जावा, मैटलैब , जीएनयु बीन शैल, पर्ल, पाइथन, आर, स्काला, Racket

अप्रैल 2016 में, क्यूनिफ़ॉर्म की कार्यान्वयन लैंग्वेज जावा से एर्लांग में बदल गई और, फरवरी 2018 में, इसका प्रमुख डिस्ट्रिब्यूटेड निष्पादन प्लेटफ़ॉर्म हडूप से डिस्ट्रिब्यूटेड एर्लांग में बदल गया। इसके अतिरिक्त, 2015 से 2018 तक HTCondor(एच्टीकोंडोर) को एक वैकल्पिक निष्पादन मंच के रूप में बनाए रखा गया था।

क्यूनिफॉर्म की सतह वाक्यविन्यास को दो बार संशोधित किया गया था, जैसा कि प्रमुख संस्करण संख्या में दर्शाया गया है।

संस्करण 1

मई 2014 में प्रकाशित अपने पहले प्रारूप में, क्यूनिफ़ॉर्म मेक (सॉफ़्टवेयर) से निकटता से संबंधित था, जिसमें उसने एक स्थिर डेटा निर्भरता ग्राफ़ का निर्माण किया था जिसे व्याख्याता ने निष्पादन के समय ट्रेस किया था। बाद के संस्करणों में मुख्य अंतर सनियम, पुनरावर्तन, या स्थैतिक प्रकार की जाँच की कमी थी। टिल्ड ~ के साथ एकल-उद्धृत स्ट्रिंग मानों को जोड़कर फ़ाइलों को स्ट्रिंग्स से अलग किया गया था। स्क्रिप्ट की क्वेरी अभिव्यक्ति को target कीवर्ड के साथ प्रस्तुत किया गया था। बैश डिफ़ॉल्ट फोरीगन लैंग्वेज थी. फलन एप्लिकेशन को एक apply फॉर्म का उपयोग करके निष्पादित किया जाना था जिसने taskपहले कीवर्ड तर्क के रूप में। एक साल बाद, इस सतह वाक्य - विन्यास को एक सुव्यवस्थित लेकिन समान संस्करण द्वारा बदल दिया गया।

निम्न उदाहरण स्क्रिप्ट एक FTP (एफटीपि)सर्वर से एक संदर्भ जीनोम डाउनलोड करती है।

  declare download-ref-genome;
deftask download-fa( fa : ~path ~id ) *{
    wget $path/$id.fa.gz
    gunzip $id.fa.gz
    mv $id.fa $fa
}*

ref-genome-path = ~'ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes';
ref-genome-id = ~'chr22';

ref-genome = apply(
    task : download-fa
    path : ref-genome-path
    id : ref-genome-id
);

target ref-genome;

संस्करण 2

क्यूनिफॉर्म 2.0.3 के लिए स्विंग-आधारित संपादक और आरईपीएल

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

निम्न स्क्रिप्ट एक ज़िप्पड(Zipped) फ़ाइल को विघटित करती है और इसे समान आकार के विभाजनों में विभाजित करती है।

 deftask unzip( <out( File )> : zip( File ) ) in bash *{
  unzip -d dir $zip
  out=`ls dir | awk '{print "dir/" $0}'`
}*

deftask split( <out( File )> : file( File ) ) in bash *{
  split -l 1024 $file txt
  out=txt*
}*

sotu = "sotu/stateoftheunion1790-2014.txt.zip";
fileLst = split( file: unzip( zip: sotu ) );

fileLst;

संस्करण 3

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

निम्न स्क्रिप्ट एक फ़ाइल को अनटार्स करती है जिसके परिणामस्वरूप एक फ़ाइल लिस्ट बनती है।

 def untar( tar : File ) -> <fileLst : [File]>
in Bash *{
  tar xf $tar
  fileLst=`tar tf $tar`
}*

let hg38Tar : File =
  'hg38/hg38.tar';

let <fileLst = faLst : [File]> =
  untar( tar = hg38Tar );

faLst;

संदर्भ

  1. "Joergen7/Cuneiform". GitHub. 14 October 2021.
  2. Brandt, Jörgen; Bux, Marc N.; Leser, Ulf (2015). "Cuneiform: A functional language for large scale scientific data analysis" (PDF). Proceedings of the Workshops of the EDBT/ICDT. 1330: 17–26.
  3. "Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience by Jörgen Brandt". Erlang Central. Archived from the original on 2 October 2016. Retrieved 28 October 2016.
  4. Bux, Marc; Brandt, Jörgen; Lipka, Carsten; Hakimzadeh, Kamal; Dowling, Jim; Leser, Ulf (2015). "SAASFEE: scalable scientific workflow execution engine" (PDF). Proceedings of the VLDB Endowment. 8 (12): 1892–1895. doi:10.14778/2824032.2824094.
  5. Bessani, Alysson; Brandt, Jörgen; Bux, Marc; Cogo, Vinicius; Dimitrova, Lora; Dowling, Jim; Gholami, Ali; Hakimzadeh, Kamal; Hummel, Michael; Ismail, Mahmoud; Laure, Erwin; Leser, Ulf; Litton, Jan-Eric; Martinez, Roxanna; Niazi, Salman; Reichel, Jane; Zimmermann, Karin (2015). "Biobankcloud: a platform for the secure storage, sharing, and processing of large biomedical data sets" (PDF). The First International Workshop on Data Management and Analytics for Medicine and Healthcare (DMAH 2015).
  6. "Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience". Erlang-factory.com. Retrieved 28 October 2016.
  7. Kelly, Peter M.; Coddington, Paul D.; Wendelborn, Andrew L. (2009). "Lambda calculus as a workflow model". Concurrency and Computation: Practice and Experience. 21 (16): 1999–2017. doi:10.1002/cpe.1448. S2CID 10833434.
  8. Barseghian, Derik; Altintas, Ilkay; Jones, Matthew B.; Crawl, Daniel; Potter, Nathan; Gallagher, James; Cornillon, Peter; Schildhauer, Mark; Borer, Elizabeth T.; Seabloom, Eric W. (2010). "Workflows and extensions to the Kepler scientific workflow system to support environmental sensor data access and analysis" (PDF). Ecological Informatics. 5 (1): 42–50. doi:10.1016/j.ecoinf.2009.08.008. S2CID 16392118.
  9. Di Tommaso, Paolo; Chatzou, Maria; Floden, Evan W; Barja, Pablo Prieto; Palumbo, Emilio; Notredame, Cedric (2017). "Nextflow enables reproducible computational workflows". Nature Biotechnology. 35 (4): 316–319. doi:10.1038/nbt.3820. PMID 28398311. S2CID 9690740.
  10. "एर्लांग में एक कार्यात्मक वर्कफ़्लो भाषा कार्यान्वयन" (PDF). Retrieved 28 October 2016.
  11. Brandt, Jörgen; Reisig, Wolfgang; Leser, Ulf (2017). "Computation semantics of the functional scientific workflow language Cuneiform". Journal of Functional Programming. 27. doi:10.1017/S0956796817000119. S2CID 6128299.