कीलाकार (प्रोग्रामिंग भाषा)

From alpha
Jump to navigation Jump to search
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] यह समानांतर कंप्यूटिंग को बढ़ावा देने वाली एक प्रकार की प्रणाली #STATIC कार्यात्मक प्रोग्रामिंग है। इसमें एक बहुमुखी विदेशी फ़ंक्शन इंटरफ़ेस है जो उपयोगकर्ताओं को कई बाहरी प्रोग्रामिंग भाषाओं से सॉफ़्टवेयर को एकीकृत करने की अनुमति देता है। संगठनात्मक स्तर पर क्यूनिफॉर्म सशर्त (कंप्यूटर प्रोग्रामिंग) और प्रत्यावर्तन जैसी सुविधाएं प्रदान करता है जिससे यह ट्यूरिंग पूर्णता | ट्यूरिंग-पूर्ण हो जाता है। इसमें, क्यूनिफॉर्म वैज्ञानिक वर्कफ़्लो सिस्टम जैसे Apache Taverna, KNIME, या गैलेक्सी (कम्प्यूटेशनल बायोलॉजी) और बड़े पैमाने पर डेटा विश्लेषण प्रोग्रामिंग मॉडल जैसे MapReduce या Pig (प्रोग्रामिंग टूल) के बीच अंतर को बंद करने का प्रयास है, जबकि एक कार्यात्मक की सामान्यता की पेशकश करता है। प्रोग्रामिंग भाषा।

क्यूनिफ़ॉर्म को वितरित एरलांग (प्रोग्रामिंग भाषा) में लागू किया गया है। यदि वितरित मोड में चलाया जाता है तो यह चमक या सेफ (सॉफ़्टवेयर)#CephFS (या किसी अन्य फ़ाइल सिस्टम, जैसे, Apache Hadoop#HDFS) के यूजरस्पेस एकीकरण में एक फ़ाइल सिस्टम जैसे POSIX- संगत वितरित फ़ाइल सिस्टम को चलाता है। वैकल्पिक रूप से, क्यूनिफॉर्म स्क्रिप्ट को एचटीसीओन्डोर या अपाचे हडूप के शीर्ष पर क्रियान्वित किया जा सकता है।[3][4][5][6] क्यूनिफॉर्म पीटर केली के काम से प्रभावित है जो वैज्ञानिक वर्कफ़्लो निष्पादन के लिए एक मॉडल के रूप में कार्यात्मक प्रोग्रामिंग का प्रस्ताव करता है।[7][8] इसमें, क्यूनिफॉर्म डेटाफ्लो प्रोग्रामिंग जैसे स्विफ्ट (समानांतर स्क्रिप्टिंग भाषा) के आधार पर संबंधित वर्कफ़्लो भाषाओं से अलग है।[9]


बाहरी सॉफ्टवेयर एकीकरण

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

AWK और gnuplot के लिए विदेशी भाषा समर्थन की योजना बनाई गई है।

टाइप सिस्टम

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

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

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

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

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

<वाक्यविन्यास प्रकाश लैंग = तेज> चलो आर : <a1 : Str, a2 : बूल > =

 <a1 = मेरी स्ट्रिंग, a2 = सच>;

</वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास प्रकाश लैंग = तेज> मान लीजिए a1 : Str = ( r|a1 );

माना <a2 = a2 : बूल> = r; </वाक्यविन्यास हाइलाइट>

सूची और सूची प्रसंस्करण

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

<वाक्यविन्यास लैंग = erlang> चलो xs: [फाइल] =

 ['a.txt', 'b.txt', 'c.txt' : फ़ाइल];

</वाक्यविन्यास हाइलाइट>

सूचियों को for और fold ऑपरेटरों के साथ संसाधित किया जा सकता है। यहां, के लिए ऑपरेटर को सूची तत्व-वार उपभोग करने के लिए कई सूचियां दी जा सकती हैं (इसी तरह for/list रैकेट (प्रोग्रामिंग भाषा) में, mapcar सामान्य लिस्प में या zipwith Erlang (प्रोग्रामिंग भाषा) में)।

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

<वाक्यविन्यास लैंग = रूबी> x के लिए <- xs करते हैं

 प्रक्रिया-एक ( arg1 = x )
 : फ़ाइल

अंत; </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास लैंग = रूबी> x <- xs, y <- ys के लिए

 प्रक्रिया-दो ( arg1 = x, arg2 = y )
 : फ़ाइल

अंत; </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास लैंग = पाठ>

 फोल्ड एसीसी = 0, x <- xs करते हैं
   जोड़ें (ए = एसीसी, बी = एक्स)
 अंत;

</वाक्यविन्यास हाइलाइट>

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

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

उदाहरण के लिए, निम्नलिखित कीलाकार कार्यक्रम के अनुप्रयोगों की अनुमति देता है 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;

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

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


उदाहरण

एक हैलो-वर्ल्ड स्क्रिप्ट: <वाक्यविन्यास लैंग = रूबी> def अभिवादन (व्यक्ति: Str) -> <आउट: Str> बैश में *{

 आउट = हैलो $ व्यक्ति

}*

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

बैश (यूनिक्स शेल) में किसी कार्य को परिभाषित करके कमांड लाइन टूल्स को एकीकृत किया जा सकता है: <वाक्यविन्यास लैंग = रूबी> def samtoolsSort (bam: फ़ाइल) -> <क्रमबद्ध: फ़ाइल> बैश में *{

 क्रमबद्ध = क्रमबद्ध। बाम
 samtools सॉर्ट -m 2G $bam -o $sorted

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

रिलीज इतिहास

Version Appearance Implementation Language Distribution Platform Foreign Languages
1.0.0 May 2014 Java Apache Hadoop Bash, Common Lisp, GNU Octave, Perl, Python, R, Scala
2.0.x Mar. 2015 Java HTCondor, Apache Hadoop Bash, BeanShell, Common Lisp, MATLAB, GNU Octave, Perl, Python, R, Scala
2.2.x Apr. 2016 Erlang HTCondor, Apache Hadoop Bash, Perl, Python, R
3.0.x Feb. 2018 Erlang Distributed Erlang Bash, Erlang, Java, MATLAB, GNU Octave, Perl, Python, R, Racket

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

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

संस्करण 1

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

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

<पूर्व> डाउनलोड-रेफरी-जीनोम घोषित करें;

deftask डाउनलोड-fa( fa : ~path ~id ) *{

   wget $path/$id.fa.gz
   गनज़िप $id.fa.gz
   एमवी $id.fa $fa

}*

रेफ-जीनोम-पथ = ~'ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes'; रेफ-जीनोम-आईडी = ~'chr22';

रेफ-जीनोम = लागू करें (

   कार्य : डाउनलोड-एफए
   पथ: रेफ-जीनोम-पथ
   आईडी: रेफ-जीनोम-आईडी

);

लक्ष्य रेफ-जीनोम; </पूर्व>

संस्करण 2

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

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

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

<पूर्व> deftask unzip(<out(File )> : zip( File ) ) बैश में *{

 अनज़िप -डी डीआईआर $ ज़िप
 आउट = `एलएस डीआईआर | awk '{print dir/ $0}'`

}*

deftask विभाजन ( <आउट (फ़ाइल)>: फ़ाइल (फ़ाइल)) बैश में * {

 स्प्लिट -l 1024 $file txt
 बाहर = txt *

}*

सोटू = सोटू/स्टेटऑफदयूनियन1790-2014.txt.zip; fileLst = विभाजन (फ़ाइल: अनज़िप (ज़िप: सोटू));

फ़ाइलLst; </पूर्व>

संस्करण 3

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

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

<पूर्व> def untar (टार: फ़ाइल) -> <fileLst: [फ़ाइल]> बैश में *{

 टार एक्सएफ $ टार
 fileLst=`tar tf $tar`

}*

चलो hg38Tar : फ़ाइल =

 'एचजी38/एचजी38.टार';

चलो <fileLst = faLst: [फ़ाइल]> =

 अनटार (टार = hg38Tar);

पहले; </पूर्व>

संदर्भ

  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.
  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. "A Functional Workflow Language Implementation in Erlang" (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.