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

From alpha
Jump to navigation Jump to search
राकू
Camelia.svg
Camelia, the Raku mascot[1]
ParadigmMulti-paradigm
परिवारPerl
द्वारा डिज़ाइन किया गयाLarry Wall
DeveloperRaku community
पहली प्रस्तुति25 December 2015; 8 years ago (2015-12-25)
Stable release
6.d 'Diwali'[2] / 24 October 2020; 3 years ago (2020-10-24)
टाइपिंग अनुशासनDynamic, gradual
ओएसCross-platform
लाइसेंसGNU General Public License or Artistic License 2
फ़ाइल नाम एक्सटेंशनएस.raku, .rakumod, .rakudoc, .t, .rakutest[3]
वेबसाइटraku.org
Major implementations
Rakudo
Influenced by
Perl, Ruby, Smalltalk, Haskell,[4] JavaScript
Influenced
Perl,[5] Haskell,[5] AntLang

राकू प्रोग्रामिंग भाषाओं के पर्ल परिवार का सदस्य है।[6] पूर्व में पर्ल 6 के नाम से जाना जाता था, अक्टूबर 2019 में इसका नाम बदल दिया गया।[7][8] राकू कई आधुनिक और ऐतिहासिक भाषाओं के तत्वों का परिचय देता है। पर्ल के साथ संगतता एक लक्ष्य नहीं था, हालांकि संगतता मोड विनिर्देश का हिस्सा है। राकू के लिए डिजाइन प्रक्रिया 2000 में शुरू हुई थी।

इतिहास

In Perl 6, we decided it would be better to fix the language than fix the user.

— Larry Wall[9]

राकू डिजाइन प्रक्रिया की घोषणा पहली बार 19 जुलाई 2000 को उस वर्ष के ओ'रेली ओपन सोर्स कन्वेंशन के चौथे दिन की गई थी।[10] लैरी वॉल द्वारा अपने पर्ल#स्टेट ऑफ़ द अनियन 2000 टॉक में।[11] उस समय, प्राथमिक लक्ष्य भाषा से ऐतिहासिक मौसा को हटाना था; आसान चीजों को आसान रहना चाहिए, कठिन चीजों को आसान होना चाहिए और असंभव चीजों को कठिन होना चाहिए; आंतरिक डिज़ाइन और अप्लिकेशन प्रोग्रामिंग अंतरफलक की सामान्य सफाई। प्रक्रिया टिप्पणियों या RFC के अनुरोध की एक श्रृंखला के साथ शुरू हुई। यह प्रक्रिया सभी योगदानकर्ताओं के लिए खुली थी, और भाषा के किसी भी पहलू को बदलने के लिए बंद नहीं किया गया था।[12] एक बार RFC प्रक्रिया पूरी हो जाने के बाद, वॉल ने प्राप्त 361 अनुरोधों में से प्रत्येक की समीक्षा और वर्गीकरण किया। इसके बाद उन्होंने शब्द के मूल अर्थ का उपयोग करते हुए, प्रकट करते हुए, कई सर्वनाश लिखने की प्रक्रिया शुरू की।[13] जबकि मूल लक्ष्य प्रोग्रामिंग पर्ल के प्रत्येक अध्याय के लिए एक सर्वनाश लिखना था, यह स्पष्ट हो गया कि, जैसा कि प्रत्येक सर्वनाश लिखा गया था, बाद के परिवर्तनों द्वारा पिछले सर्वनाश को अमान्य किया जा रहा था। इस कारण से, सार का एक सेट प्रकाशित किया गया था, प्रत्येक एक सर्वनाश की सामग्री से संबंधित था, लेकिन अद्यतनों में बाद के परिवर्तनों के साथ। आज, राकू विनिर्देश को रोस्ट टेस्टिंग सूट के माध्यम से प्रबंधित किया जाता है,[14] जबकि सारांश को एक ऐतिहासिक संदर्भ के रूप में रखा जाता है।[15] डेमियन कॉनवे द्वारा लिखी गई व्याख्याओं की एक श्रृंखला भी है जो व्यावहारिक उपयोग के संदर्भ में प्रत्येक सर्वनाश की सामग्री की व्याख्या करती है। उदाहरणों के उपयोग और प्रभावों की चर्चा के साथ-साथ प्रत्येक व्याख्या में कोड उदाहरण शामिल हैं।[16] आज राकू के विकास में उपयोग की जाने वाली संचार की तीन प्राथमिक विधियाँ हैं। पहला है मुक्त चैट पर राकू इंटरनेट रिले चैट। दूसरा मेलिंग सूचियों का एक सेट है।[17] तीसरा गिटहब पर होस्ट किया गया गिट (सॉफ्टवेयर) स्रोत कोड भंडार है।[18]


प्रारंभिक लक्ष्य और निहितार्थ

वॉल ने अपने शुरुआती भाषण में जिस प्रमुख लक्ष्य का सुझाव दिया था, वह ऐतिहासिक मौसा को हटाना था। इनमें कंटेनरों के लिए सिगिल (कंप्यूटर प्रोग्रामिंग) के उपयोग को लेकर भ्रम, select फ़ंक्शंस, और बेयरवर्ड filehand का सिंटैक्टिक प्रभाव। कई अन्य समस्याएं थीं जिन्हें पर्ल प्रोग्रामर्स ने वर्षों तक ठीक करने पर चर्चा की थी जिन्हें वॉल ने अपने भाषण में स्पष्ट रूप से संबोधित किया था।[citation needed] इन लक्ष्यों का एक निहितार्थ यह था कि पर्ल 6 में मौजूदा पर्ल कोडबेस के साथ अनिच्छुक अनुकूलता नहीं होगी। इसका मतलब यह था कि पर्ल 5 कंपाइलर द्वारा सही ढंग से व्याख्या किए गए कुछ कोड को पर्ल 6 कंपाइलर द्वारा स्वीकार नहीं किया जाएगा। चूंकि सॉफ्टवेयर को उन्नत करते समय पश्चगामी अनुकूलता एक सामान्य लक्ष्य है, इसलिए पर्ल 6 में ब्रेकिंग परिवर्तनों को स्पष्ट रूप से बताया जाना था। पर्ल 5 और पर्ल 6 के बीच अंतर इतना बड़ा हो गया कि अंततः पर्ल 6 का नाम बदलकर राकू रख दिया गया।

शुभंकर

लैरी वॉल और कैमेलिया

भाषा का शुभंकर कैमेलिया, राकू बग है।[1]

उसका नाम पर्ल से जुड़े ऊँट शुभंकर के लिए एक इशारा है, और उसका रूप, पर्ल समुदाय की दंड-प्रेमी परंपरा में, सॉफ्टवेयर बग पर एक नाटक है। उसके तितली-जैसे पंखों में एम्बेडेड सर्पिल डिज़ाइन वर्ण P6 से मिलते-जुलते हैं, जो पर्ल 6 के लिए पसंदीदा उपनाम है, और ऑफ-सेंटर आई प्लेसमेंट वॉल-आईड पर एक जानबूझकर वाक्य है।[19] लोगो के जीवंत और रंगीन डिजाइन के पीछे के लक्ष्यों में से एक समुदाय में गलत धारणा को हतोत्साहित करना था और इसके लिए मर्दाना अनुनय के लिए अपना संवेदनशील पक्ष दिखाने का अवसर होना था।[20]


कार्यान्वयन

As of 2017, केवल Rakudo कार्यान्वयन सक्रिय विकास के अंतर्गत है। किसी भी कार्यान्वयन को आधिकारिक राकू कार्यान्वयन के रूप में निर्दिष्ट नहीं किया जाएगा; बल्कि, राकू कुछ भी है जो आधिकारिक टेस्ट सूट पास करता है।[21]

राकुडो पर्ल 6[22][23] MoarVM, Java आभासी मशीन और JavaScript जैसी कई वर्चुअल मशीनों को लक्षित करता है। MoarVM विशेष रूप से Rakudo के लिए निर्मित जावा वर्चुअल मशीन है[24] और एनक्यूपी कंपाइलर टूलचैन।[25] Raku और आभासी मशीनों के बीच एक परत है जिसे Not Quite Perl 6, या NQP कहा जाता है, जो Raku को पार्स करने के लिए Raku नियमों को लागू करती है, साथ ही एक सार वाक्य रचना का पेड़ और बैकएंड-विशिष्ट कोड जनरेशन (संकलक)। Rakudo के बड़े हिस्से Raku में ही, या इसके सबसेट NQP में लिखे गए हैं। राकुडो पूरी तरह से स्व-होस्टिंग (संकलक)कंपाइलर) नहीं है। सेल्फ-होस्टिंग कार्यान्वयन, न ही राकुडो को बूटस्ट्रैपिंग कंपाइलर बनाने के लिए इस समय कोई ठोस योजना है।

ऐतिहासिक कार्यान्वयन

पग (प्रोग्रामिंग) हास्केल (प्रोग्रामिंग भाषा) में लिखे गए पर्ल 6 का प्रारंभिक कार्यान्वयन था। पग्स पर्ल 6 का सबसे उन्नत कार्यान्वयन हुआ करता था, लेकिन 2007 के मध्य से यह ज्यादातर निष्क्रिय है (केवल ग्लासगो हास्केल कंपाइलर के वर्तमान संस्करण को ट्रैक करने के लिए किए गए अपडेट के साथ)। नवंबर 2014 तक पग सक्रिय रूप से बनाए नहीं रखे जा रहे थे।[26] 2007 में, v6-MiniPerl6 ( mp6 ) और इसके पुनर्कार्यान्वयन, v6-KindaPerl6 ( kp6 ) को Perl-6.0.0 STD को बूटस्ट्रैप करने के साधन के रूप में पर्ल 5 का उपयोग करते हुए लिखा गया था। STD पर्ल 6 के लिए एक पूर्ण व्याकरण है और इसे लिखा गया है पर्ल 6 में। सिद्धांत रूप में, एसटीडी को पार्स करने और निष्पादन योग्य कोड उत्पन्न करने में सक्षम कुछ भी पर्ल 6 के लिए एक उपयुक्त बूटस्ट्रैपिंग सिस्टम है। kp6 वर्तमान में mp6 द्वारा संकलित है और कई बैकएंड के साथ काम कर सकता है।[27][28] mp6 और kp6 पूर्ण पर्ल 6 कार्यान्वयन नहीं हैं और केवल पूर्ण पर्ल 6 कंपाइलर को बूटस्ट्रैप करने के लिए आवश्यक न्यूनतम फीचरसेट को लागू करने के लिए डिज़ाइन किए गए हैं।

Yapsi एक पर्ल 6 कंपाइलर और रनटाइम था जिसे पर्ल 6 में ही लिखा गया था। नतीजतन, इसे चलाने के लिए एक मौजूदा पर्ल 6 दुभाषिया की आवश्यकता थी, जैसे कि राकुडो स्टार रिलीज में से एक।[29] Niecza, एक अन्य प्रमुख पर्ल 6 कार्यान्वयन प्रयास, अनुकूलन और कुशल कार्यान्वयन अनुसंधान पर केंद्रित है। यह सामान्य भाषा अवसंरचना को लक्षित करता है।[30]


मॉड्यूल सिस्टम

राकू विनिर्देश अनुरोध करता है कि पर्ल मॉड्यूल को नाम, संस्करण और प्राधिकरण द्वारा पहचाना जाए।[31] एक मॉड्यूल का केवल एक विशिष्ट संस्करण लोड करना संभव है, या एक ही नाम के दो मॉड्यूल जो संस्करण या प्राधिकरण में भिन्न हैं। एक सुविधा के रूप में, संक्षिप्त नाम के लिए अलियासिंग (कंप्यूटिंग) प्रदान किया जाता है।

CPAN, पर्ल मॉड्यूल डिस्ट्रीब्यूशन सिस्टम, अभी तक Raku मॉड्यूल को हैंडल नहीं करता है। इसके बजाय एक प्रोटोटाइप मॉड्यूल सिस्टम उपयोग में है।[32]


== पर्ल == से प्रमुख परिवर्तन पर्ल और राकू मौलिक रूप से भिन्न हैं, हालांकि आम तौर पर राकू पर्ल को रखने का इरादा है, ताकि राकू स्पष्ट रूप से एक पर्ल प्रोग्रामिंग भाषा हो। अधिकांश परिवर्तनों का उद्देश्य भाषा को सामान्य बनाना है, नौसिखियों और विशेषज्ञ प्रोग्रामरों के लिए समान रूप से समझना आसान बनाना और आसान चीजों को आसान और कठिन चीजों को अधिक संभव बनाना है।

एक विशिष्टता

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

एक प्रकार की प्रणाली

राकू में, गतिशील प्रकार के पर्ल को स्थिर प्रकारों के अतिरिक्त बढ़ाया गया है।[33] उदाहरण के लिए: <वाक्यविन्यास लैंग = राकु> मेरा इंट $ i = 0; मेरा चूहा $ आर = 3.142; my Str $s = हैलो, दुनिया; </वाक्यविन्यास हाइलाइट> हालाँकि, स्टैटिक टाइपिंग बनी रहती है टाइप सिस्टम # कॉम्बिनेशन स्टैटिक और डायनेमिक टाइप चेकिंग, इसलिए प्रोग्रामर बिना किसी स्पष्ट टाइपिंग के ज्यादातर काम कर सकते हैं: <वाक्यविन्यास लैंग = राकु> मेरा $i = 25 + 10; # $ मैं 35 है </वाक्यविन्यास हाइलाइट>

राकू एक क्रमिक टाइपिंग प्रणाली प्रदान करता है, जिससे प्रोग्रामर स्थिर टाइपिंग का उपयोग करना चुन सकता है, गतिशील टाइपिंग का उपयोग कर सकता है या दोनों को मिला सकता है।

औपचारिक सबरूटीन पैरामीटर सूची

पर्ल बिना पैरामीटर (कंप्यूटर विज्ञान) सूचियों के उपनेमकाओं को परिभाषित करता है (हालांकि सरल पैरामीटर गिनती और पर्ल के प्रोटोटाइप का उपयोग करके कुछ प्रकार की जांच की जा सकती है)। पास किए गए सबरूटीन तर्कों को सरणी के तत्वों में अलिया किया जाता है @_. यदि के तत्व @_ संशोधित हैं, परिवर्तन मूल डेटा में परिलक्षित होते हैं।

राकू भाषा के लिए सही औपचारिक मापदंडों का परिचय देता है।[34] राकू में, एक उपनेमका घोषणा इस तरह दिखती है: <वाक्यविन्यास लैंग = राकु> उप do_something (स्ट्र $चीज़, इंट $अन्य) {

   ...

} </वाक्यविन्यास हाइलाइट> जैसा कि पर्ल में है, औपचारिक पैरामीटर (अर्थात्, पैरामीटर सूची में चर) वास्तविक पैरामीटर (पास किए गए मान) के उपनाम हैं, लेकिन डिफ़ॉल्ट रूप से, उपनाम स्थिर (प्रोग्रामिंग) हैं, इसलिए उन्हें संशोधित नहीं किया जा सकता है। उन्हें मूल मूल्य के लिए स्पष्ट रूप से पढ़ने-लिखने के उपनाम के रूप में या प्रतियों के रूप में घोषित किया जा सकता है is rw या is copy निर्देश क्रमशः प्रोग्रामर को उन्हें स्थानीय रूप से संशोधित करने की आवश्यकता होनी चाहिए।

पैरामीटर पासिंग मोड

राकू पैरामीटर पासिंग के तीन बुनियादी तरीके प्रदान करता है: स्थितीय पैरामीटर, नामित पैरामीटर और स्लर्पी पैरामीटर।

पोजिशनल पैरामीटर उन पैरामीटरों की विशिष्ट ऑर्डर की गई सूची है जिनका उपयोग अधिकांश प्रोग्रामिंग भाषाएं करती हैं। सभी मापदंडों को उनके नाम का उपयोग करके एक अनियंत्रित तरीके से पारित किया जा सकता है। केवल-नामित पैरामीटर (ए द्वारा इंगित किया गया : पैरामीटर नाम से पहले) केवल इसके नाम को निर्दिष्ट करके पारित किया जा सकता है, यानी यह कभी भी एक स्थितीय तर्क को कैप्चर नहीं करता है। स्लर्पी पैरामीटर (ए द्वारा इंगित किया गया * पैरामीटर नाम से पहले) विविध कार्यों को बनाने के लिए राकू के उपकरण हैं। एक स्लर्पी हैश शेष पास-बाय-नेम पैरामीटर्स को कैप्चर करेगा, जबकि एक स्लर्पी ऐरे शेष पास-बाय-पोजिशन पैरामीटर्स को कैप्चर करेगा।

यहाँ तीनों पैरामीटर-पासिंग मोड्स के उपयोग का एक उदाहरण दिया गया है:

<वाक्यविन्यास लैंग = राकु> उप कुछ फ़ंक्शन ($ ए, $ बी, : $ सी, : $ डी, * @ ई) {

   ...

}

कुछ समारोह (1, 2,: डी (3), 4, 5, 6); # $a=1, $b=2, $d=3, @e=(4,5,6) </वाक्यविन्यास हाइलाइट>

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

ब्लॉक और क्लोजर

मापदंडों को मनमाना ब्लॉकों में भी पारित किया जा सकता है, जो क्लोजर (कंप्यूटर विज्ञान) के रूप में कार्य करता है। यह कैसे है, उदाहरण के लिए, for और while लूप इटरेटर्स का नाम दिया गया है। निम्नलिखित उदाहरण में, एक सूची का पता लगाया जाता है, एक समय में 3 तत्व, और लूप के ब्लॉक को चर के रूप में पारित किया जाता है, $a, $b, $c.[35] <वाक्यविन्यास लैंग = राकु> @ सूची के लिए -> $ ए, $ बी, $ सी {

   ...

} </वाक्यविन्यास हाइलाइट> इसे आम तौर पर नुकीले उप या नुकीले ब्लॉक के रूप में संदर्भित किया जाता है, और तीर लगभग बिल्कुल वैसा ही व्यवहार करता है sub कीवर्ड, एक अनाम क्लोजर (या पर्ल शब्दावली में अनाम सबरूटीन) का परिचय देता है।[34]


सिगिल इनवेरिएंस

पर्ल में, सिगिल (कंप्यूटर प्रोग्रामिंग) - विराम चिह्न वर्ण जो एक चर नाम से पहले होते हैं - चर का उपयोग कैसे किया जाता है इसके आधार पर परिवर्तन:

# पर्ल कोड

मेरे @सरणी = ('ए', 'बी', 'सी');

मेरा $तत्व = $सरणी [1]; # $ तत्व 'बी' के बराबर है,
मेरा @extract = @सरणी [1, 2]; # @extract बराबर ('बी', 'सी')
मेरा $तत्व = @सरणी [1]; # 'बी' चेतावनी के साथ आता है (5.10 विकल्प)

राकू में, सिगिल अपरिवर्तनीय हैं, जिसका अर्थ है कि वे इस आधार पर नहीं बदलते हैं कि क्या यह सरणी या सरणी तत्व है जिसकी आवश्यकता है:[33]

  1. राकू कोड
मेरे @सरणी = 'ए', 'बी', 'सी';
मेरा $तत्व = @सरणी [1]; # $ तत्व 'बी' के बराबर है
मेरा @extract = @सरणी [1]; # @extract बराबर ('बी')
मेरा @extract = @सरणी [1, 2]; # @extract बराबर ('बी', 'सी')

पर्ल में भिन्नता अंग्रेजी और कई अन्य प्राकृतिक भाषाओं में संख्या समझौते से प्रेरित है:

 यह सेब। # $ एक सही
 ये सेब। # @ सही
 यह तीसरा सेब। # $a[3] सही
 ये तीसरा सेब। # @a[3] गलत

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

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

  1. पर्ल कोड: एक हैश युक्त हैश के पत्ते से एक सूची प्राप्त करें जिसमें सरणियाँ हों

my @trans_verbs = @{ $dictionary{ 'verb' }{ 'transitive' }}; </वाक्यविन्यास हाइलाइट>

प्राकृतिक भाषा या अन्य प्रोग्रामिंग भाषाओं के सामान्य उपयोग में इस जटिलता का कोई समकक्ष नहीं है,[dubious ] और यह जटिल डेटा संरचनाओं में हेरफेर करने के लिए कोड लिखते समय उच्च संज्ञानात्मक भार का कारण बनता है। राकू में यह वही कोड है: <वाक्यविन्यास लैंग = राकु>

  1. राकू कोड: एक हैश युक्त हैश के पत्ते से एक सूची प्राप्त करें जिसमें सरणियाँ हों

my @trans_verbs = %dictionary<verb><transitive><>; </वाक्यविन्यास हाइलाइट>

वस्तु-उन्मुख प्रोग्रामिंग

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

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

आसान चीजों को आसान और कठिन चीजों को संभव बनाने की भावना में, राकू आशीर्वाद मॉडल को बरकरार रखता है और सामान्य मामलों के लिए अधिक मजबूत वस्तु मॉडल प्रदान करता है।[36] उदाहरण के लिए, कार्टेसियन समन्वय प्रणाली बिंदु (ज्यामिति) को समाहित करने के लिए एक वर्ग को परिभाषित किया जा सकता है और इस तरह इस्तेमाल किया जा सकता है: <वाक्यविन्यास लैंग = राकु> क्लास प्वाइंट आरडब्ल्यू है {

   $.x है;
   $.y है;
   
   विधि दूरी (प्वाइंट $ पी) {
       sqrt(($!x - $p.x) ** 2 + ($!y - $p.y) ** 2)
   }
   
   विधि दूरी-से-केंद्र {
       स्व.दूरी: बिंदु.नया (x => 0, y => 0)
   }

}

मेरा $ पॉइंट = पॉइंट.न्यू (x => 1.2, y => -3.7); पॉइंट का स्थान कहें: ( , $point.x, ', ', $point.y, ')';

  1. आउटपुट: बिंदु का स्थान: (1.2, -3.7)
  1. x और y को बदलना

$ बिंदु x = 3; $point.y = 4; पॉइंट का स्थान कहें: ( , $point.x, ', ', $point.y, ')';

  1. आउटपुट: बिंदु का स्थान: (3, 4)

my $other-point = Point.new(x => -5, y => 10); $point.distance($other-point); #=> 10 $point.distance-to-center; #=> 5 </वाक्यविन्यास हाइलाइट> डॉट कई अन्य भाषाओं (जैसे C++, Java (प्रोग्रामिंग लैंग्वेज), पायथन (प्रोग्रामिंग लैंग्वेज), आदि) में तीर को एक नोड में बदल देता है, जो कि विधि मंगलाचरण के लिए सिंटैक्स के रूप में डॉट के आसपास जमा हो गए हैं।

राकू की शब्दावली में, $.x गुण कहलाता है। कुछ भाषाएँ इन क्षेत्रों या सदस्यों को बुलाती हैं। किसी विशेषता को एक्सेस करने के लिए उपयोग की जाने वाली विधि को एक्सेसर कहा जाता है। एक ऑटो-एक्सेसर विधि स्वचालित रूप से बनाई गई एक विधि है और विधि के रूप में विशेषता के नाम के नाम पर है x ऊपर के उदाहरण में है। ये एक्सेसर फ़ंक्शन विशेषता का मान लौटाते हैं। जब एक वर्ग या व्यक्तिगत विशेषता के साथ घोषित किया जाता है is rw संशोधक (पढ़ने/लिखने के लिए छोटा), ऑटो-एक्सेसर्स को विशेषता सेट करने के लिए एक नया मान पारित किया जा सकता है, या इसे सीधे मान (कंप्यूटर विज्ञान) #lrvalue (उदाहरण के रूप में) के रूप में असाइन किया जा सकता है। ऑटो-एक्सेसर्स को यूजर-डिफ़ाइंड विधियों द्वारा प्रतिस्थापित किया जा सकता है, प्रोग्रामर को एक विशेषता के लिए एक समृद्ध इंटरफ़ेस की इच्छा होनी चाहिए। एट्रिब्यूट्स को केवल क्लास डेफिनिशन के भीतर से सीधे एक्सेस किया जा सकता है $! सिंटैक्स इस बात की परवाह किए बिना कि विशेषताएँ कैसे घोषित की जाती हैं। अन्य सभी एक्सेस को एक्सेसर विधियों के माध्यम से जाना चाहिए।

Raku ऑब्जेक्ट सिस्टम ने Moose (Perl) फ्रेमवर्क को प्रेरित किया है जो Raku की कई OOP विशेषताओं को Perl से परिचित कराता है।[clarification needed]


वंशानुक्रम, भूमिकाएं और वर्ग

वंशानुक्रम वह तकनीक है जिसके द्वारा कोई वस्तु या प्रकार मौजूदा वस्तुओं या प्रकारों से कोड या परिभाषाओं का पुन: उपयोग कर सकता है। उदाहरण के लिए, एक प्रोग्रामर एक मानक प्रकार रखना चाहता है लेकिन एक अतिरिक्त विशेषता के साथ। अन्य भाषाओं में विरासत, जैसे जावा, कक्षाओं को मौजूदा कक्षाओं के उप-वर्ग होने की अनुमति देकर प्रदान की जाती है।

राकू कक्षाओं के माध्यम से वंशानुक्रम प्रदान करता है, जो अन्य भाषाओं और भूमिकाओं में कक्षाओं के समान हैं।

राकू में भूमिकाएँ इंटरफ़ेस (जावा) के कार्य पर ले जाती हैं, रूबी में मिश्रित होती हैं, और विशेषता (कंप्यूटर विज्ञान)[37] PHP में और स्मॉलटाक वैरिएंट चीख़ में। ये काफी हद तक कक्षाओं की तरह हैं, लेकिन वे एक सुरक्षित रचना तंत्र प्रदान करते हैं।[38] कक्षाओं के साथ उपयोग किए जाने पर इनका उपयोग उनकी विरासत (कंप्यूटर विज्ञान) श्रृंखला में जोड़ने के बजाय रचना करने के लिए किया जाता है। भूमिकाएँ नाममात्र प्रकार परिभाषित करती हैं; वे व्यवहार और स्थिति के संग्रह के लिए शब्दार्थ नाम प्रदान करते हैं। एक भूमिका और एक वर्ग के बीच मूलभूत अंतर यह है कि वर्गों को तत्काल किया जा सकता है; भूमिकाएँ नहीं हैं।[39] हालाँकि भूमिकाएँ कक्षाओं से भिन्न होती हैं, फिर भी राकू कोड लिखना संभव है जो सीधे एक भूमिका को तत्काल करता है या एक प्रकार की वस्तु के रूप में एक भूमिका का उपयोग करता है, राकू स्वचालित रूप से भूमिका के समान नाम के साथ एक वर्ग बना देगा, जिससे पारदर्शी रूप से भूमिका का उपयोग करना संभव हो जाता है मानो यह एक वर्ग था।[40] अनिवार्य रूप से, एक भूमिका (संभवतः सार) विधियों और विशेषताओं का एक बंडल है जिसे विरासत का उपयोग किए बिना कक्षा में जोड़ा जा सकता है। एक भूमिका को एक व्यक्तिगत वस्तु में भी जोड़ा जा सकता है; इस स्थिति में, राकू एक अनाम उपवर्ग बनाएगा, भूमिका को उपवर्ग में जोड़ देगा, और वस्तु की कक्षा को अनाम उपवर्ग में बदल देगा।

उदाहरण के लिए, एक कुत्ता एक स्तनपायी है क्योंकि कुत्ते स्तनधारियों से कुछ विशेषताओं को प्राप्त करते हैं, जैसे कि स्तन ग्रंथियां और (स्तनपायी के माता-पिता, कशेरुकी के माध्यम से) एक कशेरुकी स्तंभ। दूसरी ओर, कुत्तों में भी कई अलग-अलग प्रकार के व्यवहार हो सकते हैं, और ये व्यवहार समय के साथ बदल सकते हैं। उदाहरण के लिए, एक कुत्ता एक पालतू जानवर हो सकता है, एक जंगली (एक परित्यक्त पालतू जानवर जीवित रहने के लिए व्यवहार प्राप्त करेगा जो किसी पालतू जानवर से जुड़ा नहीं है), या अंधे के लिए एक मार्गदर्शक कुत्ता (गाइड कुत्तों को प्रशिक्षित किया जाता है, इसलिए वे मार्गदर्शक कुत्तों के रूप में जीवन शुरू नहीं करते हैं) ). हालाँकि, ये अतिरिक्त व्यवहारों के समूह हैं जिन्हें एक कुत्ते में जोड़ा जा सकता है। इन व्यवहारों का इस तरह से वर्णन करना भी संभव है कि उन्हें अन्य जानवरों पर उपयोगी रूप से लागू किया जा सके, उदाहरण के लिए, एक बिल्ली समान रूप से पालतू या आवारा हो सकती है। इसलिए, कुत्ता और बिल्ली एक दूसरे से अलग हैं, जबकि दोनों अधिक सामान्य श्रेणी के स्तनपायी हैं। तो स्तनपायी एक वर्ग है और कुत्ता और बिल्ली वे वर्ग हैं जो स्तनपायी से विरासत में मिले हैं। लेकिन पेट, स्ट्रे और गाइड से जुड़े व्यवहार ऐसी भूमिकाएँ हैं जिन्हें कक्षाओं में जोड़ा जा सकता है, या वस्तुओं को कक्षाओं से जोड़ा जा सकता है। <वाक्यविन्यास लैंग = राकु> वर्ग स्तनपायी कशेरुकी है {

   ...

} वर्ग कुत्ता स्तनपायी है {

   ...

} भूमिका पालतू {

   ...

} भूमिका आवारा {

   ...

} भूमिका गाइड {

   ...

} </वाक्यविन्यास हाइलाइट> रोल्स को क्लास या ऑब्जेक्ट में जोड़ा जाता है does कीवर्ड। एक वर्ग से वंशानुक्रम दिखाने के लिए एक अलग कीवर्ड है is. कीवर्ड दो विशेषताओं के अलग-अलग अर्थों को दर्शाते हैं: भूमिका रचना एक वर्ग को भूमिका का व्यवहार देती है, लेकिन यह इंगित नहीं करती है कि यह वास्तव में भूमिका के समान ही है। <वाक्यविन्यास लैंग = राकु> क्लास गाइडडॉग डॉग डूज़ गाइड है {

   ...

} # उपवर्ग भूमिका की रचना करता है

मेरा $ कुत्ता = नया कुत्ता; $dog गाइड करता है; # व्यक्तिगत वस्तु भूमिका की रचना करती है </वाक्यविन्यास हाइलाइट> हालाँकि भूमिकाएँ कक्षाओं से भिन्न होती हैं, दोनों प्रकार हैं, इसलिए एक भूमिका एक चर घोषणा में प्रकट हो सकती है जहाँ कोई सामान्य रूप से एक वर्ग रखता है। उदाहरण के लिए, मानव के लिए एक नेत्रहीन भूमिका में प्रकार गाइड की विशेषता शामिल हो सकती है; इस विशेषता में एक गाइड डॉग, एक गाइड घोड़ा, एक गाइड ह्यूमन या एक गाइड मशीन भी हो सकती है। <वाक्यविन्यास लैंग = राकु> वर्ग मानव {

   कुत्ता $ कुत्ता है; # किसी भी प्रकार का कुत्ता हो सकता है, चाहे वह करता हो
   ...#गाइड रोल है या नहीं

} भूमिका अंधा {

   गाइड $ गाइड है; # गाइड की भूमिका निभाने वाली कोई भी वस्तु हो सकती है,
   ...#चाहे कुत्ता हो या कुछ और

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

नियमित अभिव्यक्ति

पर्ल की नियमित अभिव्यक्ति और स्ट्रिंग-प्रोसेसिंग सपोर्ट हमेशा इसकी परिभाषित विशेषताओं में से एक रही है।[41] चूंकि पर्ल के पैटर्न-मिलान निर्माण कुछ समय के लिए नियमित भाषा अभिव्यक्ति की क्षमताओं से अधिक हो गए हैं,[42] राकू प्रलेखन औपचारिक परिभाषा से शब्द को अलग करते हुए विशेष रूप से उन्हें रेगेक्स के रूप में संदर्भित करेगा।

राकू रेगेक्स के संबंध में पर्ल सुविधाओं का एक सुपरसेट प्रदान करता है, उन्हें राकू नियम नामक एक बड़े ढांचे में तब्दील कर देता है जो संदर्भ-संवेदनशील भाषा की क्षमता प्रदान करता है। साथ ही उनके कार्यक्षेत्र (प्रोग्रामिंग) के संबंध में क्लोजर (कंप्यूटर साइंस) के रूप में कार्य करना।[43] के साथ नियम पेश किए गए हैं rule कीवर्ड जिसका उपयोग सबरूटीन परिभाषा के समान है। बेनामी नियम भी इसके साथ पेश किए जा सकते हैं regex (या rx) कीवर्ड, या वे केवल इनलाइन के रूप में उपयोग किए जा सकते हैं क्योंकि regexps पर्ल के माध्यम से थे m (मिलान) या s (स्थानापन्न) ऑपरेटर।

सर्वनाश 5 में, लैरी वॉल ने वर्तमान रेगेक्स संस्कृति के साथ 20 समस्याओं की गणना की। इनमें से पर्ल के रेगेक्स बहुत कॉम्पैक्ट और 'प्यारे' थे, बहुत कम मेटाचैकर पर बहुत अधिक निर्भरता थी, नामांकित कैप्चर के लिए थोड़ा समर्थन, व्याकरण के लिए थोड़ा समर्थन और 'वास्तविक' भाषा के साथ खराब एकीकरण।[44]


वाक्यात्मक सरलीकरण

राकू में कुछ पर्ल निर्माणों को बदल दिया गया है, जो सबसे सामान्य मामलों के लिए विभिन्न वाक्यात्मक संकेतों के लिए अनुकूलित है। उदाहरण के लिए, पर्ल में नियंत्रण प्रवाह निर्माण में आवश्यक कोष्ठक (गोल कोष्ठक) अब वैकल्पिक हैं:[35]<वाक्यविन्यास लैंग = राकु> अगर सच है () {

   @array के लिए {
       ...
   }

} </वाक्यविन्यास हाइलाइट> यह भी , (अल्पविराम) ऑपरेटर अब एक सूची निर्माता है, इसलिए अब सूचियों के चारों ओर संलग्न कोष्ठक की आवश्यकता नहीं है। कोड <वाक्यविन्यास लैंग = राकु> @array = 1, 2, 3, 4; </वाक्यविन्यास हाइलाइट> अब बनाता है @array '1', '2', '3' और '4' तत्वों के साथ एक सरणी।

जंजीर तुलना

राकू श्रृंखला से तुलना की अनुमति देता है। अर्थात्, तुलना के अनुक्रम की अनुमति है जैसे कि निम्नलिखित: <वाक्यविन्यास लैंग = राकु> अगर 20 <= $ तापमान <= 25 {

   कहें कि कमरे का तापमान 20 से 25 के बीच है!

} </वाक्यविन्यास हाइलाइट> इसे ऐसे माना जाता है जैसे कि प्रत्येक बाएँ से दाएँ तुलना अपने आप की जाती है, और परिणाम तार्किक रूप से संयुक्त होता है and संचालन।

आलसी मूल्यांकन

राकू सूचियों के आलसी मूल्यांकन की तकनीक का उपयोग करता है जो कुछ कार्यात्मक प्रोग्रामिंग भाषाओं जैसे हास्केल (प्रोग्रामिंग भाषा) की विशेषता रही है:[45] <वाक्यविन्यास लैंग = राकु> @integers = 0..Inf; # 0 से अनंत तक के पूर्णांक </वाक्यविन्यास हाइलाइट> सरणी के लिए अनंत आकार की सूची निर्दिष्ट करने का प्रयास करने से उपरोक्त कोड क्रैश नहीं होगा @integers, न ही सीमित संख्या में स्लॉट खोजे जाने पर सूची का विस्तार करने के प्रयास में यह अनिश्चित काल तक लटका रहेगा।

यह Raku में इनपुट/आउटपुट ऑपरेशंस, लिस्ट ट्रांसफॉर्मेशन और पैरामीटर पासिंग सहित कई सामान्य कार्यों को सरल करता है।

इकट्ठा

आलसी मूल्यांकन से संबंधित उपयोग करने वाली आलसी सूचियों का निर्माण है gather और takeचिह्न (प्रोग्रामिंग भाषा) या पायथन (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में जनरेटर की तरह व्यवहार करना। <वाक्यविन्यास लैंग = राकु> my $squares = 0..Inf { के लिए आलसी इकट्ठा

   $_ * $_ लें;

}; </वाक्यविन्यास हाइलाइट> $squares वर्ग संख्याओं की एक अनंत सूची होगी, लेकिन इसका आलसी मूल्यांकन gather यह सुनिश्चित करता है कि तत्वों की गणना केवल तभी की जाती है जब उन्हें एक्सेस किया जाता है।

जंक्शन

राकू जंक्शनों की अवधारणा का परिचय देता है: मूल्य जो अन्य मूल्यों के सम्मिश्र हैं।[45]अपने सरलतम रूप में, जंक्शन ऑपरेटर (प्रोग्रामिंग) के साथ मानों के एक सेट को जोड़कर जंक्शन बनाए जाते हैं: <वाक्यविन्यास लैंग = राकु>

  1. के लिए उदाहरण | (कोई भी) जंक्शन:

मेरा $ रंग = 'सफेद'; जब तक कि $color eq 'सफ़ेद' | 'ब्लैक' | 'ग्रे' | 'स्लेटी' {

   डाइ कलर प्रिंटिंग समर्थित नहीं\n ;

}

  1. उदाहरण के लिए और (सभी) जंक्शन:

मेरा $पासवर्ड = 'गुप्त!123'; if $password ~~ /<:alpha>/ & /<:digit>/ & /<:punct>/ {

   कहते हैं आपका पासवर्ड उचित रूप से सुरक्षित है;

} </वाक्यविन्यास हाइलाइट> | एक मान इंगित करता है जो इसके बाएँ या दाएँ हाथ के तर्कों के बराबर है। & एक मान इंगित करता है जो इसके बाएँ और दाएँ हाथ के दोनों तर्कों के बराबर है। इन मानों का उपयोग किसी भी कोड में किया जा सकता है जो सामान्य मान का उपयोग करेगा। जंक्शन पर किए गए ऑपरेशन जंक्शन के सभी सदस्यों पर समान रूप से कार्य करते हैं, और जंक्शन ऑपरेटर के अनुसार गठबंधन करते हैं। इसलिए, ("apple"|"banana") ~ "s" उपज होगा "apples"|"bananas". तुलना में, जंक्शन तुलना के लिए एक सही या गलत परिणाम देता है।anyयदि जंक्शन के तत्वों में से किसी एक के लिए तुलना सही है तो जंक्शन सही हो जाते हैं।allयदि जंक्शन के सभी तत्वों के लिए तुलना सही है तो जंक्शन सही हो जाते हैं।

जंक्शनों का उपयोग सामान्य प्रोग्रामिंग की एक शैली को पेश करके टाइप सिस्टम को अधिक समृद्ध रूप से बढ़ाने के लिए भी किया जा सकता है जो कि प्रकार के जंक्शनों के लिए विवश है: <वाक्यविन्यास लैंग = राकु> किसी भी जगह का उपसमुच्चय रंग RGB_Color | सीएमवाईके_रंग; उप get_tint (रंग $ रंग, संख्या $ अपारदर्शिता) {

   ...

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

मैक्रोज़

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

एक राकू मैक्रो परिभाषा एक सबरूटीन या विधि परिभाषा की तरह दिखेगी, और यह अनपार्स्ड स्ट्रिंग्स पर काम कर सकती है, एक सार सिंटैक्स ट्री पूर्व-पार्स किए गए कोड का प्रतिनिधित्व करता है, या दोनों का संयोजन। मैक्रो परिभाषा इस तरह दिखेगी:[47] <वाक्यविन्यास लैंग = राकु> मैक्रो हैलो ($ क्या) {

   अर्ध { नमस्ते कहो { {{{$what}}} }};

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

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

पहचानकर्ता

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

उदाहरण

हैलो वर्ल्ड

हैलो वर्ल्ड प्रोग्राम एक सामान्य प्रोग्राम है जिसका इस्तेमाल किसी भाषा को पेश करने के लिए किया जाता है। राकू में, हैलो वर्ल्ड है: <वाक्यविन्यास लैंग = राकु> 'हैलो, वर्ल्ड' कहें; </वाक्यविन्यास हाइलाइट> - हालांकि इसे करने के एक से अधिक तरीके हैं

कारख़ाने का

Raku में फैक्टोरियल फ़ंक्शन, कुछ अलग तरीकों से परिभाषित किया गया है: <वाक्यविन्यास लैंग = राकु>

  1. पुनरावर्तन का उपयोग करना (`if\else` निर्माण के साथ)

उप तथ्य ( UInt $n --> UInt ) {

   अगर $n == 0 { 1 }
   और {$n * तथ्य ($n-1)}

}

  1. पुनरावर्तन का उपयोग करना (`if` के साथ कथन संशोधक के रूप में)

उप तथ्य ( UInt $n --> UInt ) {

   वापसी 1 अगर $n == 0;
   वापसी $n * तथ्य ($ n-1);

}

  1. पुनरावर्तन का उपयोग करना (`कब` निर्माण के साथ)

उप तथ्य ( UInt $n --> UInt ) {

   जब $n == 0 { 1 }
   डिफ़ॉल्ट {$n * तथ्य ($n-1)}

}

  1. टर्नरी ऑपरेटर का उपयोग करना

उप तथ्य ( UInt $n --> UInt ) {

   $n == 0 ?? 1 !! $n * तथ्य ($n-1)

}

  1. एकाधिक प्रेषण का उपयोग करना

बहु तथ्य (0) { 1 } बहु तथ्य ( UInt $n --> UInt ) {

   $n * तथ्य ($n - 1)

}

  1. कमी मेटाऑपरेटर का उपयोग करना

उप तथ्य ( UInt $n --> UInt ) {

   [*] 1..$n

}

  1. फैक्टोरियल ऑपरेटर बनाना और रिडक्शन मेटाऑपरेटर का उपयोग करना

सब पोस्टफिक्स:<!>( UInt $n --> UInt ) { [*] 1..$n}

  1. मेमोइज्ड फैक्टोरियल बनाने के लिए 'स्टेट' डिक्लेरेटर का उपयोग करना

उप तथ्य ( UInt $n --> UInt ) {

   राज्य% ज्ञात = 0 => 1;
   रिटर्न %ज्ञात{$n} यदि %ज्ञात{$n}:मौजूद है;
   %ज्ञात{$n} = $n * तथ्य ($n-1);
   वापसी% ज्ञात{$n};

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

जल्दी से सुलझाएं

क्विकसॉर्ट एक प्रसिद्ध छँटाई एल्गोरिथ्म है। एक कार्य कार्यान्वयन[lower-alpha 1] कार्यात्मक प्रोग्रामिंग प्रतिमान का उपयोग राकू में संक्षेप में लिखा जा सकता है: <वाक्यविन्यास लैंग = राकु>

  1. खाली सूची खाली सूची को सॉर्ट करती है

मल्टी क्विकॉर्ट ([]) { ()}

  1. अन्यथा, पहले आइटम को पिवट के रूप में निकालें...

मल्टी क्विकसॉर्ट([$पिवोट, *@रेस्ट]) {

   # विभाजन।
   my @before = @rest.grep(* $pivot से पहले);
   my @after = @rest.grep(* $pivot के बाद);
   # विभाजनों को क्रमबद्ध करें।
   फ्लैट (क्विकसॉर्ट (@before), $ पिवोट, क्विकसॉर्ट (@बाद))

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

  1. Unless the implementation does something fancy and mysterious behind the scenes, the maximal possible recursion depth is the length of the list, making this implementation unsuitable for big data. Recursion depth can be limited to log2(list_length) by iterating into the larger of partitions before and after, and only recursing into the smaller partition.


हनोई की मीनार

कंप्यूटर विज्ञान में पुनरावर्ती प्रोग्रामिंग को पेश करने के लिए हनोई के टॉवर का उपयोग अक्सर किया जाता है। यह कार्यान्वयन राकू के बहु-प्रेषण तंत्र और पैरामीट्रिक बाधाओं का उपयोग करता है: <वाक्यविन्यास लैंग = राकु> मल्टी सब हनोई(0, $, $, $) { } # कोई डिस्क नहीं है, इसलिए कुछ भी न करें मल्टी सब हनोई($n, $a = 'A', $b = 'B', $c = 'C') { # $n डिस्क और तीन पेग A, B, C से शुरू करें

   हनोई $n - 1, $a, $c, $b; # सबसे पहले शीर्ष $n - 1 डिस्क को A से B पर ले जाएँ
   डिस्क $n को खूंटी $a से खूंटी $c पर ले जाएं; # फिर अंतिम डिस्क को A से C पर ले जाएं
   हनोई $n - 1, $b, $a, $c; # अंत में $n - 1 डिस्क को B से C पर ले जाएँ

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

किताबें

राकू के इतिहास में पुस्तक लेखन की दो लहरें थीं। पहली लहर 2000 में पर्ल 6 की प्रारंभिक घोषणा के बाद आई। वे पुस्तकें उस समय की भाषा के डिजाइन की स्थिति को दर्शाती हैं, और उनमें ज्यादातर पुरानी सामग्री होती है। दूसरी लहर, जो 2015 में संस्करण 1.0 की घोषणा के बाद आई, में कई किताबें शामिल हैं जो पहले ही प्रकाशित हो चुकी हैं और कुछ अन्य जो लिखी जाने की प्रक्रिया में हैं।

=== पर्ल 6 संस्करण 1.0 (संस्करण 6.c के रूप में जाना जाता है) === से पहले प्रकाशित पुस्तकें

  • ए. रैंडल, डी. सुगल्स्की, एल. टॉट्श। पर्ल 6 और पैरट एसेंशियल, पहला संस्करण, 2003, ISBN 978-0596004996
  • ए. रैंडल, डी. सुगल्स्की, एल. टॉट्श। पर्ल 6 और पैरेट एसेंशियल्स, दूसरा संस्करण 2004। ISBN 978-0596007379
  • एस वाल्टर्स। Perl 6 Now: The Core Ideas Illustrated with Perl 5. 2004। ISBN 978-1590593950

साथ ही, पहली पर्ल 6 आभासी मशीनों में से एक, पैरट को समर्पित एक पुस्तक 2009 में प्रकाशित हुई थी।


=== पर्ल 6 संस्करण 1.0 (संस्करण 6.c के रूप में जाना जाता है) === के बाद प्रकाशित पुस्तकें


नए राकू नाम से प्रकाशित पुस्तकें

प्रकाशित होने वाली पुस्तकें

कुछ रिपोर्टें हैं[48] नई पुस्तकों के बारे में विभिन्न लेखकों से जो जल्द ही प्रकाशित होने वाली हैं, सभी पर्ल 6 के वर्तमान संस्करण 1.0 (संस्करण 6.c के रूप में जाना जाता है) पर आधारित हैं।

संदर्भ

  1. 1.0 1.1 Jackson, Joab (23 July 2010). "पर्ल निर्माता लंबे समय से प्रतीक्षित पर्ल 6 के आसन्न रिलीज पर संकेत देता है". IDG News Service. Retrieved 8 February 2015.
  2. "Announce: Raku Perl 6 'Diwali' 6.d Language Specification Release". blogs.perl.org. Zoffix Znet. 5 November 2018. Retrieved 19 August 2022.
  3. "Modules". docs.raku.org. Retrieved 19 August 2022.
  4. "Glossary of Terms and Jargon". Perl Foundation Perl 6 Wiki. The Perl Foundation. 28 February 2011. Archived from the original on 21 January 2012. Retrieved 8 February 2015.
  5. 5.0 5.1 唐鳳, a.k.a. Audrey Tang (21 April 2010). "How to Implement Perl 6 in '10".
  6. "पर्ल के बारे में". perl.org. Retrieved 11 June 2020. "पर्ल" भाषाओं का एक परिवार है, "राकू" (जिसे पहले "पर्ल 6" के नाम से जाना जाता था) परिवार का हिस्सा है, लेकिन यह एक अलग भाषा है जिसकी अपनी विकास टीम है। "पर्ल" के निरंतर विकास पर इसके अस्तित्व का कोई महत्वपूर्ण प्रभाव नहीं है।
  7. "पर्ल 6 का नाम बदलकर राकू कर दिया गया". LWN.net. 15 October 2019. Retrieved 16 October 2019.
  8. "राकू के नाम बदलने पर टीपीएफ की प्रतिक्रिया". 29 October 2019.
  9. Biancuzzi, Federico; Warden, Shane (2009). Masterminds of Programming: Conversations with the Creators of Major Programming Languages. ISBN 978-0596515171.
  10. Kline, Joe (21 August 2000). "पर्ल सम्मेलन से रिपोर्ट".
  11. Wall, Larry (2000). "प्याज राज्य 2000". O'Reilly Network.
  12. The Perl Foundation (2000). "पर्ल 6 आरएफसी के बारे में".
  13. Wall, Larry (2 April 2001). "सर्वनाश 1: द अग्ली, द बैड एंड द गुड".
  14. "राकू टेस्ट सूट". GitHub. 2019.
  15. Larry Wall and the Perl 6 designers (2015). "पर्ल 6 डिज़ाइन दस्तावेज़".
  16. The Perl Foundation (2001). "Exegeses".
  17. The Raku Programming Language (2022). "राकू समुदाय".
  18. "राकू". GitHub. Retrieved 19 August 2022.
  19. "आईआरसी चैट लॉग में लैरी वॉल". 15 January 2016. Retrieved 10 November 2017.
  20. "लैरी वॉल से संग्रहीत "लोगो विचार" ईमेल". GitHub. 24 March 2009. Retrieved 10 November 2017.
  21. 21.0 21.1 Wall, Larry (10 August 2004). "सारांश 1: सिंहावलोकन".
  22. "ऊंट". Github.com. Retrieved 21 September 2013.
  23. Michaud, Patrick (16 January 2008). "संकलक जिसे पहले 'perl6' के नाम से जाना जाता था". Archived from the original on 18 February 2012.
  24. Worthington, Jonathan (31 May 2013). "MoarVM: NQP और Rakudo के लिए एक वर्चुअल मशीन". 6guts. Retrieved 24 July 2013.
  25. "NQP - जीथब पर काफी पर्ल नहीं". GitHub. 29 May 2022. Retrieved 29 May 2022.
  26. "पर्ल 6 कंपाइलर्स की फीचर तुलना". Archived from the original on 7 February 2019.
  27. Wall, Larry; et al. (2007). "पर्ल 6 एसटीडी". GitHub.
  28. "mp6/kp6 अक्सर पूछे जाने वाले प्रश्न". Perl 6 development team. 2006.
  29. "याप्सी रीडमे". GitHub. 2011.
  30. O'Rear, Stefan (29 November 2011). "Niecza README.pod". GitHub. Retrieved 12 January 2012.
  31. Wall, Larry (2004). "सारांश 11: मॉड्यूल".
  32. "पर्ल 6 मॉड्यूल निर्देशिका". Modules.raku.org. Retrieved 17 May 2020.
  33. 33.0 33.1 Wall, Larry (20 May 2009). "सिनॉप्सिस 2: बिट्स एंड पीसेज".
  34. 34.0 34.1 34.2 Wall, Larry (21 March 2003). "सिनॉप्सिस 6: सबरूटीन्स".
  35. 35.0 35.1 Wall, Larry (20 May 2009). "सिनॉप्सिस 4: ब्लॉक और स्टेटमेंट".
  36. Wall, Larry (18 August 2006). "सारांश 12: वस्तुएँ".
  37. The Software Composition Group (2003). "विशेषताएँ". Archived from the original on 11 August 2006. Retrieved 22 September 2006.
  38. Worthington, Jonathan (2009). "दिन 18: भूमिकाएँ".
  39. chromatic (2009). "पर्ल रोल्स का क्यों".
  40. "वस्तु अभिविन्यास". docs.raku.org. Retrieved 24 October 2019.
  41. Parlante, Nick (2000). "एसेंशियल पर्ल: रेगुलर एक्सप्रेशंस के साथ स्ट्रिंग प्रोसेसिंग".
  42. Christiansen, Tom (1996). "PERL5 नियमित अभिव्यक्ति विवरण". Archived from the original on 31 March 2010. Retrieved 25 March 2010. पर्ल के रेगेक्सप्स "नहीं हैं" - अर्थात, वे "नियमित" नहीं हैं क्योंकि बैकरेफरेंस प्रति sed और grep भी समर्थित हैं, जो भाषा को अब सख्ती से नियमित नहीं करता है
  43. Wall, Larry (20 May 2009). "सारांश 5: रेगेक्स और नियम".
  44. Wall, Larry (4 June 2002). "सर्वनाश 5: पैटर्न मिलान".
  45. 45.0 45.1 Wall, Larry (13 September 2004). "सारांश 9: डेटा संरचनाएं".
  46. Lamkins, David B. (8 December 2004). सक्सेसफुल लिस्प: कॉमन लिस्प को कैसे समझें और इस्तेमाल करें. bookfix.com. Archived from the original on 12 September 2006. Retrieved 13 September 2006.
  47. "मैक्रोज़".
  48. Books about Perl 6


इस पेज में लापता आंतरिक लिंक की सूची

  • अनुकूलता प्रणाली
  • टिप्पणियों के लिए अनुरोध
  • मेलिंग सूची
  • GitHub
  • राकू नियम
  • सोर्स कोड
  • विविध समारोह
  • क्लोजर (कंप्यूटर साइंस)
  • संज्ञानाात्मक भार
  • struct
  • सबरूटीन
  • जावा (प्रोग्रामिंग भाषा)
  • पायथन (प्रोग्रामिंग भाषा)
  • कार्तीय समन्वय प्रणाली
  • मिक्सिन
  • छोटी बात
  • वंशानुक्रम (कंप्यूटर विज्ञान)
  • सस्तन प्राणी
  • हड्डीवाला
  • राह बताने वाला कुत्ता
  • रीढ़
  • बारहसिंगे के शाखादार सींग
  • वाक्यात्मक विधेय
  • पदच्छेद
  • पार्सिंग अभिव्यक्ति व्याकरण
  • प्रसंग-संवेदनशील भाषा
  • बहाव को काबू करें
  • हनोई का टावर

बाहरी कड़ियाँ

  • No URL found. Please specify a URL here or add one to Wikidata.

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