नेमर्ले: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 18: Line 18:
|website        = {{URL|nemerle.org}}
|website        = {{URL|nemerle.org}}
}}
}}
नेमर्ले एक सामान्य-उद्देश्य, [[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय]], वैधानिक रूप से [[स्थिर टाइपिंग|स्थिर लिखी गयी]] '''की गई''' '''कार्यक्रमिक''' [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] [[प्रोग्रामिंग भाषा|भाषा]] है। कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर अर्थात सामान्य भाषा अवसंरचना('''.'''नेट/मोनो) का उपयोग करने वाले मंचों के लिए रूपांकित किया गया है। यह [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक कार्यक्रमिक]] , वस्तु-उन्मुख, पक्ष-उन्मुख कार्यक्रमिक , [[चिंतनशील प्रोग्रामिंग|चिंतनशील]] [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] '''कार्यक्रमिक''' और [[अनिवार्य प्रोग्रामिंग|अनिवार्य]] [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] '''कार्यक्रमिक''' सुविधाएँ प्रदान करता है। इसमें एक साधारण सी-शार्प ( कार्यक्रमिक भाषा ) अर्थात सी#-जैसे सिंटैक्स और एक शक्तिशाली [[मेटाप्रोग्रामिंग|मेटाप्रोग्रामिंग प्रणाली]] है।
नेमर्ले सामान्य-उद्देश्य, [[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय]], वैधानिक रूप से [[स्थिर टाइपिंग|स्थिर लिखी गयी]] [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] [[प्रोग्रामिंग भाषा|भाषा]] है। कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर अर्थात सामान्य भाषा अवसंरचना('''.'''नेट/मोनो) का उपयोग करने वाले मंचों के लिए रूपांकित किया गया है। यह [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक कार्यक्रमिक]] , वस्तु-उन्मुख, पक्ष-उन्मुख कार्यक्रमिक , [[चिंतनशील प्रोग्रामिंग|चिंतनशील]] [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] और [[अनिवार्य प्रोग्रामिंग|अनिवार्य]] [[कार्यात्मक प्रोग्रामिंग|कार्यक्रमिक]] सुविधाएँ प्रदान करता है। इसमें साधारण सी-शार्प ( कार्यक्रमिक भाषा) अर्थात सी#-जैसे सिंटैक्स और शक्तिशाली [[मेटाप्रोग्रामिंग|मेटाप्रोग्रामिंग प्रणाली]] है।


जून 2012 में, चेक सॉफ्टवेयर विकास क्षेत्र [[जेटब्रेन्स]] द्वारा नेमर्ले के मुख्य विकासकर्ताओं को काम पर रखा गया था। यह समूह नाइट्रा(नित्रा) को विकसित करने पर ध्यान केंद्रित कर रहा था, जो आधुनिक और नई कार्यक्रमिक भाषाओं को प्रयुक्त करने के लिए एक रूपरेखा है।<ref>{{cite web|url=https://twitter.com/orangy/status/216127804482404352 |title=Twitter / orangy: We've decided to bring Nemerle |publisher=Twitter.com |access-date=2013-09-05}}</ref><ref>{{cite web|url=http://blogs.jetbrains.com/dotnet/2012/06/jetbrains-and-nemerle/ |title=JetBrains .NET Tools Blog » JetBrains and Nemerle |publisher=Blogs.jetbrains.com |date=2012-06-27 |access-date=2013-09-05}}</ref><ref>{{cite web|url=https://groups.google.com/forum/#!topic/nemerle-en/LKkEcftHF9I |title=Google Discussiegroepen |access-date=2013-09-05}}</ref> नेमर्ले भाषा और नाइट्रा दोनों को जेटब्रेन्स द्वारा छोड़ दिया गया है अथवा इन्हें बंद कर दिया गया है; नाइट्रा को 2017 के बाद से इसके मूल रचनाकारों द्वारा अद्यतन नहीं किया गया है और नेमर्ले को अब पूरी तरह से रूसी सॉफ्टवेयर विकास नेटवर्क, जेटब्रेन्स से स्वतंत्र रूप से बनाए रखा गया है, चूंकि अभी तक कोई बड़ा अद्यतन जारी नहीं किया गया है और विकास बहुत धीमी गति से आगे बढ़ रहा है। जेटब्रेन्स द्वारा वर्षों से न तो नेमेर्ले और न ही नाइट्रा का उल्लेख या संदर्भ दिया गया है।
जून 2012 में, जांच सॉफ्टवेयर विकास क्षेत्र [[जेटब्रेन्स]] द्वारा नेमर्ले के मुख्य विकासकर्ताओं को काम पर रखा गया था। यह समूह नाइट्रा(नित्रा) को विकसित करने पर ध्यान केंद्रित कर रहा था, जो आधुनिक और नई कार्यक्रमिक भाषाओं को प्रयुक्त करने के लिए रूपरेखा है।<ref>{{cite web|url=https://twitter.com/orangy/status/216127804482404352 |title=Twitter / orangy: We've decided to bring Nemerle |publisher=Twitter.com |access-date=2013-09-05}}</ref><ref>{{cite web|url=http://blogs.jetbrains.com/dotnet/2012/06/jetbrains-and-nemerle/ |title=JetBrains .NET Tools Blog » JetBrains and Nemerle |publisher=Blogs.jetbrains.com |date=2012-06-27 |access-date=2013-09-05}}</ref><ref>{{cite web|url=https://groups.google.com/forum/#!topic/nemerle-en/LKkEcftHF9I |title=Google Discussiegroepen |access-date=2013-09-05}}</ref> नेमर्ले भाषा और नाइट्रा दोनों को जेटब्रेन्स द्वारा छोड़ दिया गया है अथवा इन्हें बंद कर दिया गया है; नाइट्रा को 2017 के बाद से इसके मूल रचनाकारों द्वारा अद्यतन नहीं किया गया है और नेमर्ले को अब पूरी तरह से रूसी सॉफ्टवेयर विकास नेटवर्क, जेटब्रेन्स से स्वतंत्र रूप से बनाए रखा गया है, चूंकि अभी तक कोई बड़ा अद्यतन जारी नहीं किया गया है और विकास बहुत धीमी गति से आगे बढ़ रहा है। जेटब्रेन्स द्वारा वर्षों से न तो नेमेर्ले और न ही नाइट्रा का उल्लेख या संदर्भ दिया गया है।


नेमेर्ले का नाम आर्कमेज नेमेर्ले के नाम पर रखा गया है, जो उर्सुला के. ले गिनी द्वारा फंतासी(कपोल कल्पित) उपन्यास [[Earthsea का एक जादूगर|पृथ्वीसमुद्र का एक जादूगर(विजार्ड ऑफ अर्थसी)]] में एक पात्र है।
नेमेर्ले का नाम आर्कमेज नेमेर्ले के नाम पर रखा गया है, जो उर्सुला के. ले गिनी द्वारा फंतासी(कपोल कल्पित) उपन्यास [[Earthsea का एक जादूगर|पृथ्वीसमुद्र का जादूगर(विजार्ड ऑफ अर्थसी)]] में पात्र है।


== विशेषताएं ==
== विशेषताएं ==
नेमर्ले की सबसे उल्लेखनीय विशेषता कार्यक्रमिकता की शैलियों को मिलाने की क्षमता है जो वस्तु उन्मुख और कार्यात्मक हैं। कार्यक्रम को वस्तु उन्मुख अवधारणाएँ जैसे वर्ग और नाम-स्थान का उपयोग करके संरचित किया जा सकता है, अपितु विधियों को एक कार्यात्मक शैली में लिखा जा सकता है। अन्य उल्लेखनीय विशेषताओं में सम्मिलित बिंदु निम्नवत हैं:
नेमर्ले की सबसे उल्लेखनीय विशेषता कार्यक्रमिकता की शैलियों को मिलाने की क्षमता है जो वस्तु उन्मुख और कार्यात्मक हैं। कार्यक्रम को वस्तु उन्मुख अवधारणाएँ जैसे वर्ग और नाम-स्थान का उपयोग करके संरचित किया जा सकता है, अपितु विधियों को कार्यात्मक शैली में लिखा जा सकता है। अन्य उल्लेखनीय विशेषताओं में सम्मिलित बिंदु निम्नवत हैं:
* शक्तिशाली प्रकार का निष्कर्ष।  
* शक्तिशाली प्रकार का निष्कर्ष।  
* एक लचीला मेटाप्रोग्रामिंग उपप्रणाली ([[मैक्रो (कंप्यूटर विज्ञान)|मैक्रोज़]] का उपयोग करके)।  
* लचीला मेटाप्रोग्रामिंग उपप्रणाली ([[मैक्रो (कंप्यूटर विज्ञान)|मैक्रोज़]] का उपयोग करके)।  
* सी#, जावा ( कार्यक्रमिक भाषा ), और [[C++|सी++]] की शैली में [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड कार्यक्रमिक अथवा वस्तु उन्मुख कार्यकर्म]](ओओपी) के लिए पूर्ण समर्थन। [[एमएल (प्रोग्रामिंग भाषा)|एमएल (कार्यक्रमिक भाषा)]], [[OCaml|ओकैमल]], और [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल कार्यक्रमिक भाषा)]] की शैली में कार्यात्मक कार्यक्रमिक के लिए पूर्ण समर्थन, इसकी विशेषताओं के साथ:
* सी#, जावा ( कार्यक्रमिक भाषा ), और [[C++|सी++]] की शैली में [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड कार्यक्रमिक अथवा वस्तु उन्मुख कार्यकर्म]](ओओपी) के लिए पूर्ण समर्थन। [[एमएल (प्रोग्रामिंग भाषा)|एमएल (कार्यक्रमिक भाषा)]], [[OCaml|ओकैमल]], और [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल कार्यक्रमिक भाषा)]] की शैली में कार्यात्मक कार्यक्रमिक के लिए पूर्ण समर्थन, इसकी विशेषताओं के साथ:
** उच्च क्रम के कार्य
** उच्च क्रम के कार्य
** [[पैटर्न मिलान|प्रतिरूप मिलान]]
** [[पैटर्न मिलान|प्रतिरूप मिलान]]
Line 36: Line 36:
** कार्यों का आंशिक अनुप्रयोग
** कार्यों का आंशिक अनुप्रयोग


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


=== प्रकार का निष्कर्ष ===
=== प्रकार का निष्कर्ष ===
Line 45: Line 45:
</syntaxhighlight>
</syntaxhighlight>


=== सब एक अभिव्यक्ति है ===
=== सब अभिव्यक्ति है ===
<syntaxhighlight>
<syntaxhighlight>
def x =
def x =
Line 87: Line 87:
}
}
</syntaxhighlight>
</syntaxhighlight>
डीईएफ़ परिणाम = मैच (संख्या)
{
  | 0 => शून्य
  | 1 => एक
  | x जब x <0 => ऋणात्मक
  | _ => एक से अधिक
}
</वाक्यविन्यास हाइलाइट>


{{hidden|Other pattern matching examples|style = border:1px dashed gray;|
{{hidden|Other pattern matching examples|style = border:1px dashed gray;|
Line 154: Line 144:
WriteLine(fibonacci(10)); // 55
WriteLine(fibonacci(10)); // 55
</syntaxhighlight>
</syntaxhighlight>
  | 0 => 0
  | 1 => 1
  | अन्य => फाइबोनैचि (i - 1) + फाइबोनैचि (i - 2)
=== प्रकार ===
=== प्रकार ===
प्रकार (एसएमएल और [[OCaml|ओकैमल]] में आंकड़ा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के आंकड़े को व्यक्त करने के रूप हैं:
प्रकार (एसएमएल और [[OCaml|ओकैमल]] में आंकड़ा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के आंकड़े को व्यक्त करने के रूप हैं:
<syntaxhighlight>
<syntaxhighlight>
variant RgbColor {
variant RgbColor {
Line 173: Line 159:
</syntaxhighlight>
</syntaxhighlight>
=== मेटाप्रोग्रामिंग ===
=== मेटाप्रोग्रामिंग ===
नेमर्ले का मैक्रो प्रणाली संकलन के समय कार्यक्रम संहिता बनाने, विश्लेषण करने और संशोधित करने की अनुमति देता है। मैक्रोज़ का उपयोग विधि कॉल के रूप में या नई भाषा निर्माण के रूप में किया जा सकता है। भाषा के अंदर कई निर्माण मैक्रोज़ (यदि, के लिए, प्रत्येक के लिए, अपितु, आदि का उपयोग करके) का उपयोग करके कार्यान्वित किए जाते हैं।<syntaxhighlight>
नेमर्ले का मैक्रो प्रणाली संकलन के समय कार्यक्रम संहिता बनाने, विश्लेषण करने और संशोधित करने की अनुमति देता है। मैक्रोज़ का उपयोग विधि कॉल के रूप में या नई भाषा निर्माण के रूप में किया जा सकता है। भाषा के अंदर कई निर्माण मैक्रोज़ (यदि, के लिए, प्रत्येक के लिए, अपितु, आदि का उपयोग करके) का उपयोग करके कार्यान्वित किए जाते हैं।<syntaxhighlight>
macro @if (cond, e1, e2)
macro @if (cond, e1, e2)
syntax ("if", "(", cond, ")", e1, Optional (";"), "else", e2)
syntax ("if", "(", cond, ")", e1, Optional (";"), "else", e2)
Line 202: Line 188:
=== ब्रेसलेस सिंटैक्स ===
=== ब्रेसलेस सिंटैक्स ===


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


निम्नलिखित कर्ली-ब्रेस स्निपेट:<syntaxhighlight>
निम्नलिखित कर्ली-ब्रेस स्निपेट:<syntaxhighlight>
Line 253: Line 239:


विशेष रूप से, बैकस्लैश का उपयोग किए बिना कई पंक्तियों में मैचों में अभिव्यक्तियों या वैकल्पिक खंडों को तोड़ना संभव नहीं है <code>\</code>:
विशेष रूप से, बैकस्लैश का उपयोग किए बिना कई पंक्तियों में मैचों में अभिव्यक्तियों या वैकल्पिक खंडों को तोड़ना संभव नहीं है <code>\</code>:
// यह संकलित नहीं होगा ...
स्टेटिक बार(): इंट
   डेफ फू = 2
   डेफ फू = 2
   + 7
   + 7
Line 325: Line 305:


===हैलो, विश्व!===
===हैलो, विश्व!===
पारंपरिक हैलो वर्ल्ड! कार्यक्रम अधिक सी #-जैसी फैशन में कार्यान्वित किया जा सकता है:
पारंपरिक हैलो वर्ल्ड! कार्यक्रम अधिक सी #-जैसी फैशन में कार्यान्वित किया जा सकता है:
 
 
=== मैक्रोज़ के उदाहरण ===
=== मैक्रोज़ के उदाहरण ===
मैक्रोज़ संकलक द्वारा किए गए अतिरिक्त सांख्यिकीय रूप से चेक के साथ [[बॉयलरप्लेट कोड|बॉयलरप्लेट संहिता]] उत्पन्न करने की अनुमति देते हैं। वे हाथ से लिखे जाने वाले संहिता की मात्रा को कम करते हैं, संहिता पीढ़ी(कोड जेनरेशन) को सुरक्षित बनाते हैं, और स्रोत संहिता को अपेक्षाकृत छोटा और पठनीय रखते हुए कार्यक्रम को संकलक चेक के साथ संहिता उत्पन्न करने की अनुमति देते हैं।
मैक्रोज़ संकलक द्वारा किए गए अतिरिक्त सांख्यिकीय रूप से जांच के साथ [[बॉयलरप्लेट कोड|बॉयलरप्लेट संहिता]] उत्पन्न करने की अनुमति देते हैं। वे हाथ से लिखे जाने वाले संहिता की मात्रा को कम करते हैं, संहिता पीढ़ी(कोड जेनरेशन) को सुरक्षित बनाते हैं, और स्रोत संहिता को अपेक्षाकृत छोटा और पठनीय रखते हुए कार्यक्रम को संकलक जांच के साथ संहिता उत्पन्न करने की अनुमति देते हैं।


==== स्ट्रिंग स्वरूपण ====
==== स्ट्रिंग स्वरूपण ====
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर कोतंत्रिकाजोड़तोड़ के लिए सरल करता है:
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को तंत्रिका नष्ट और निर्माण के लिए सरल करता है:


==== घोषणात्मक संहिता पीढ़ी ====
==== घोषणात्मक संहिता पीढ़ी ====
Line 338: Line 316:
संरचनात्मक समानता, मेमोइज़, जेसन, और मैक्रोज़ हैं जो संकलन समय में संहिता उत्पन्न करते हैं। चूंकि उनमें से कुछ (संरचनात्मक समानता, मेमोइज़) सी# विशेषताओं की तरह दिख सकते हैं, संकलन के समय, उन्हें संकलक द्वारा जांचा जाएगा और उनके मैक्रोज़ द्वारा पूर्वनिर्धारित तर्क का उपयोग करके उपयुक्त संहिता में बदल दिया जाएगा।
संरचनात्मक समानता, मेमोइज़, जेसन, और मैक्रोज़ हैं जो संकलन समय में संहिता उत्पन्न करते हैं। चूंकि उनमें से कुछ (संरचनात्मक समानता, मेमोइज़) सी# विशेषताओं की तरह दिख सकते हैं, संकलन के समय, उन्हें संकलक द्वारा जांचा जाएगा और उनके मैक्रोज़ द्वारा पूर्वनिर्धारित तर्क का उपयोग करके उपयुक्त संहिता में बदल दिया जाएगा।


====डेटाबेस पहुंच ====
===डेटाबेस पहुंच ===


एसक्यूएल के लिए नेमर्ले मैक्रोज़ का उपयोग करके आप लिख सकते हैं:
एसक्यूएल के लिए नेमर्ले मैक्रोज़ का उपयोग करके आप लिख सकते हैं:


और यह केवल लाइब्रेरी में कुछ संचालन छुपा नहीं रहा है, किंतु जिज्ञासा तंत्रिका(क्वेरी स्ट्रिंग) को समझने के लिए संकलक द्वारा किया गया अतिरिक्त कार्य, वहां उपयोग किए जाने वाले चर, और स्तम्भ डेटाबेस से लौटाए गए हैं। ExecuteReaderLoop(रीडरलूप निष्पादित करें) मैक्रो आपको मैन्युअल(स्वनिर्मित) रूप से अंकित करने के लिए सामान्यतः समतुल्य संहिता उत्पन्न करेगा। इसके अतिरिक्त, यह जाँचने के लिए संकलन समय पर डेटाबेस से जुड़ता है कि आपकी एसक्यूएल जिज्ञासा वास्तव में समझ में आती है।
और यह केवल लाइब्रेरी में कुछ संचालन छुपा नहीं रहा है, किंतु जिज्ञासा तंत्रिका(क्वेरी स्ट्रिंग) को समझने के लिए संकलक द्वारा किया गया अतिरिक्त कार्य, वहां उपयोग किए जाने वाले चर, और स्तम्भ डेटाबेस से लौटाए गए हैं। ExecuteReaderLoop(रीडरलूप निष्पादित करें) मैक्रो आपको मैन्युअल(स्वनिर्मित) रूप से अंकित करने के लिए सामान्यतः समतुल्य संहिता उत्पन्न करेगा। इसके अतिरिक्त, यह जाँचने के लिए संकलन समय पर डेटाबेस से जुड़ता है कि आपकी एसक्यूएल जिज्ञासा वास्तव में समझ में आती है।
Line 352: Line 329:


=== पी इनवोक ===
=== पी इनवोक ===
नेमेर्ले वास्तविक मंच पुस्तकालय का लाभ उठा सकता है। सिंटैक्स सी# और अन्य .नेट भाषाओं के समान है। यहाँ सबसे सरल उदाहरण है:
नेमेर्ले वास्तविक मंच पुस्तकालय का लाभ उठा सकता है। सिंटैक्स सी# और अन्य .नेट भाषाओं के समान है। यहाँ सबसे सरल उदाहरण है:


==संदर्भ==
==संदर्भ==

Revision as of 19:15, 5 March 2023

Nemerle
ParadigmMulti-paradigm: aspect-oriented, event-driven, functional, generic, imperative, meta, object-oriented, reflective
परिवारC#
द्वारा डिज़ाइन किया गयाKamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta at Wrocław University
DeveloperJetBrains (formerly)
RSDN
पहली प्रस्तुति2003; 21 years ago (2003)
Stable release
1.2.507.0[1] / 6 August 2016; 8 years ago (2016-08-06)
टाइपिंग अनुशासनInferred, nominal, static, strong
प्लेटफॉर्मCLI
फ़ाइल नाम एक्सटेंशनएस.n
वेबसाइटnemerle.org
Major implementations
Nemerle
Influenced by
C#, Lisp, ML

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

जून 2012 में, जांच सॉफ्टवेयर विकास क्षेत्र जेटब्रेन्स द्वारा नेमर्ले के मुख्य विकासकर्ताओं को काम पर रखा गया था। यह समूह नाइट्रा(नित्रा) को विकसित करने पर ध्यान केंद्रित कर रहा था, जो आधुनिक और नई कार्यक्रमिक भाषाओं को प्रयुक्त करने के लिए रूपरेखा है।[2][3][4] नेमर्ले भाषा और नाइट्रा दोनों को जेटब्रेन्स द्वारा छोड़ दिया गया है अथवा इन्हें बंद कर दिया गया है; नाइट्रा को 2017 के बाद से इसके मूल रचनाकारों द्वारा अद्यतन नहीं किया गया है और नेमर्ले को अब पूरी तरह से रूसी सॉफ्टवेयर विकास नेटवर्क, जेटब्रेन्स से स्वतंत्र रूप से बनाए रखा गया है, चूंकि अभी तक कोई बड़ा अद्यतन जारी नहीं किया गया है और विकास बहुत धीमी गति से आगे बढ़ रहा है। जेटब्रेन्स द्वारा वर्षों से न तो नेमेर्ले और न ही नाइट्रा का उल्लेख या संदर्भ दिया गया है।

नेमेर्ले का नाम आर्कमेज नेमेर्ले के नाम पर रखा गया है, जो उर्सुला के. ले गिनी द्वारा फंतासी(कपोल कल्पित) उपन्यास पृथ्वीसमुद्र का जादूगर(विजार्ड ऑफ अर्थसी) में पात्र है।

विशेषताएं

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

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

प्रकार का निष्कर्ष

def x = 1;           // int
def myList = List(); // generic List[T], type T is deduced from the usage in the next line
myList.Add(x);       // compiler deduces type of T as int making myList type of List[int]

सब अभिव्यक्ति है

def x =
  { // similar to x = 3
    def y = 1;
    def z = 2;
    y + z   // this last statement is a block return value
  };

def x =
  if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)  // if, using, try are also expressions
    "Monday"
  else
    "other day";

def x = try int.Parse(someString)
        catch { | FormatException() => 0 };

def x = returnBlock : 
  {
    foreach (i in [1, 2, 3])
      when (i > 2)
        returnBlock(true); // exit block (x = true)

    false // x = false
  };

टुपल्स

def k = (1, "one"); // k : (int * string)
def (a, b) = k; // a = 1, b = "one"

प्रतिरूप मिलान

def result = match (number)
{
  | 0            => "zero"
  | 1            => "one"
  | x when x < 0 => "negative"
  | _            => "more than one"
}
Other pattern matching examples

Type matching with variable binding:

def check (o : object) {
  match (o) 
  {
    | i is int    => $"An int: $i"
    | s is string => $"A string: $(s.ToUpper())"
    | _           => "Object of another type"
  }
}

Tuple pattern matching:

match (tuple) 
{
  | ( 42, _ ) => "42 on first position"
  | ( _, 42 ) => "42 on second position"
  | ( x, y )  => $"( $x, $y )"
}

Regexp matching:

using Nemerle.Text;
regexp match (str) {
  | "a+.*"                          => printf("a\n");
  | @"(?<num : int>\d+)-\w+"        => printf("%d\n", num + 3);
  | "(?<name>(Ala|Kasia))? ma kota" =>
     match (name) 
     {
       | Some (n) => printf("%s\n", n)
       | None     => printf("noname?\n")
     }

  | _                               => printf("default\n");
}

कार्यात्मक प्रकार और स्थानीय प्रकार्य

using System.Console; // classes and modules (static classes) can be put in namespaces
def next(x) { x + 1 }; // the type of x argument and other function arguments can be deduced from usage

def mult(x, y) { x * y };

def fibonacci(i)
{
  | 0     => 0
  | 1     => 1
  | other => fibonacci(i - 1) + fibonacci(i - 2)
};

WriteLine(next(9));        // 10  similar to "Console.WriteLine(next(9));" 
WriteLine(mult(2, 2));     // 4
WriteLine(fibonacci(10)); // 55

प्रकार

प्रकार (एसएमएल और ओकैमल में आंकड़ा प्रकार या योग प्रकार कहा जाता है) कई अलग-अलग प्रकार के आंकड़े को व्यक्त करने के रूप हैं:

variant RgbColor {
   | Red
   | Yellow
   | Green
   | Different {
       red : float;
       green : float;
       blue : float;
     }
 }

मेटाप्रोग्रामिंग

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

macro @if (cond, e1, e2)
syntax ("if", "(", cond, ")", e1, Optional (";"), "else", e2)
{
  /*
    <[ ]> defines an area of quasi-quotation, the Nemerle compiler transforms the code in it 
    to an AST, such transformations are somewhat similar to an Expression compiling in C#
  */
  <[
    match ($cond : bool)
    {
      | true => $e1
      | _ => $e2
    }
  ]>
}

// using this macro in code:
def max = if (a > b) a else b;
// during a compile time the upper line will be transformed to this:
def max = match (a > b)
{
  | true => a
  | _    => b
}

ब्रेसलेस सिंटैक्स

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

निम्नलिखित कर्ली-ब्रेस स्निपेट:

using System.Console;

[Qux]
class FooBar {
  public static Main(): void {
    WriteLine("Hello")
  }

  static Foo (x: int): void {
    if (x == 3) {
      def y = x * 42;
      Foo (x)
    } else {
      [x].Map (fun (x) {
        x * 2
      })
    }
  }

  static Bar(): int {
    def foo = 2 + 7 * 13;
    foo
  }
}
using System.Console;

[Qux] \
class FooBar
  public static Main(): void
    WriteLine("Hello")

  static Foo (x: int): void
    if (x == 3) 
      def y = x * 42;
      Foo (x)
    else
      [x].Map (fun (x) {
        x * 2
      })

  static Bar(): int
    def foo = 2 + 7 * 13
    foo

के रूप में फिर से लिखा जा सकता है:

विशेष रूप से, बैकस्लैश का उपयोग किए बिना कई पंक्तियों में मैचों में अभिव्यक्तियों या वैकल्पिक खंडों को तोड़ना संभव नहीं है \:

 डेफ फू = 2
 + 7
 * 13
 फू

मिलान

 | ए
 | आ => 1
 | बी
 | बी बी => 2
 | _ => 0

// किन्तु यह होगा:

स्टेटिक बार (): इंट

 डेफ फू = 2 \
 + 7 \
 * 13
 फू

मिलान

 | ए \
 | आ => 1
 | बी \
 | बी बी => 2
 | _ => 0

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

// This will not compile ...

static Bar(): int
  def foo = 2 
     + 7 
     * 13
  foo

match (s)
  | "a"
  | "aa" => 1
  | "b"
  | "bb" => 2
  | _ => 0
 
// But this will:

static Bar(): int
  def foo = 2 \ 
     + 7 \
     * 13
  foo

match (s)
  | "a" \
  | "aa" => 1
  | "b" \
  | "bb" => 2
  | _ => 0

इस सिंटैक्स को सक्रिय करने के लिए, उपयोगकर्ता को जोड़ना होगा फ़ाइल के शीर्ष पर #pragma indent या संकलक विकल्प-iका उपयोग करें।

आईडीई

नेमर्ले को एकीकृत विकास पर्यावरण(आईडीई) विजुअल स्टूडियो 2008 में एकीकृत किया जा सकता है।इसमें विजुअल स्टूडियो 2008 शेल (विजुअल स्टूडियो एक्सप्रेस संस्करण की तरह) और SharpDevelop या तीव्र विकास(लिंक टू प्लगइन सोर्स संहिता ) पर आधारित पूरी तरह से मुफ्त आईडीई भी है।[5]

ऐड-इन्स और एक्सटेंशन(विस्तार) का उपयोग करके नेमर्ले को विजुअल स्टूडियो (2017 तक) में भी एकीकृत किया जा सकता है।[6]

उदाहरण

हैलो, विश्व!

पारंपरिक हैलो वर्ल्ड! कार्यक्रम अधिक सी #-जैसी फैशन में कार्यान्वित किया जा सकता है:

मैक्रोज़ के उदाहरण

मैक्रोज़ संकलक द्वारा किए गए अतिरिक्त सांख्यिकीय रूप से जांच के साथ बॉयलरप्लेट संहिता उत्पन्न करने की अनुमति देते हैं। वे हाथ से लिखे जाने वाले संहिता की मात्रा को कम करते हैं, संहिता पीढ़ी(कोड जेनरेशन) को सुरक्षित बनाते हैं, और स्रोत संहिता को अपेक्षाकृत छोटा और पठनीय रखते हुए कार्यक्रम को संकलक जांच के साथ संहिता उत्पन्न करने की अनुमति देते हैं।

स्ट्रिंग स्वरूपण

स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को तंत्रिका नष्ट और निर्माण के लिए सरल करता है:

घोषणात्मक संहिता पीढ़ी

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

डेटाबेस पहुंच

एसक्यूएल के लिए नेमर्ले मैक्रोज़ का उपयोग करके आप लिख सकते हैं:

और यह केवल लाइब्रेरी में कुछ संचालन छुपा नहीं रहा है, किंतु जिज्ञासा तंत्रिका(क्वेरी स्ट्रिंग) को समझने के लिए संकलक द्वारा किया गया अतिरिक्त कार्य, वहां उपयोग किए जाने वाले चर, और स्तम्भ डेटाबेस से लौटाए गए हैं। ExecuteReaderLoop(रीडरलूप निष्पादित करें) मैक्रो आपको मैन्युअल(स्वनिर्मित) रूप से अंकित करने के लिए सामान्यतः समतुल्य संहिता उत्पन्न करेगा। इसके अतिरिक्त, यह जाँचने के लिए संकलन समय पर डेटाबेस से जुड़ता है कि आपकी एसक्यूएल जिज्ञासा वास्तव में समझ में आती है।

नई भाषा का निर्माण

नेमर्ले मैक्रोज़ के साथ आप भाषा में कुछ नए सिंटैक्स भी प्रस्तुत कर सकते हैं:

एएसपी.नेट के साथ नेमेर्ले

नेमर्ले को या तो सीधे एएसपी.नेट(ASP.NET) में अंत:स्थापन किया जा सकता है:

पी इनवोक

नेमेर्ले वास्तविक मंच पुस्तकालय का लाभ उठा सकता है। सिंटैक्स सी# और अन्य .नेट भाषाओं के समान है। यहाँ सबसे सरल उदाहरण है:

संदर्भ

  1. Nemerle 1.2.507.0
  2. "Twitter / orangy: We've decided to bring Nemerle". Twitter.com. Retrieved 2013-09-05.
  3. "JetBrains .NET Tools Blog » JetBrains and Nemerle". Blogs.jetbrains.com. 2012-06-27. Retrieved 2013-09-05.
  4. "Google Discussiegroepen". Retrieved 2013-09-05.
  5. Nemerle Studio Microsoft Setup Installer can be installed after installing Visual Studio Shell 2008 Isolated
  6. Visual Studio 2010 add-in

अग्रिम पठन

बाहरी संबंध