नेमर्ले: Difference between revisions

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


जून 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++]] की शैली में [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग अथवा वस्तु उन्मुख कार्यकर्म]](ओओपी) के लिए पूर्ण समर्थन
* सी#, जावा (प्रोग्रामिंग लैंग्वेज), और [[C++]] की शैली में [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग अथवा वस्तु उन्मुख कार्यकर्म]](ओओपी) के लिए पूर्ण समर्थन
* [[एमएल (प्रोग्रामिंग भाषा)]], [[OCaml|ओकैमल]], और [[हास्केल (प्रोग्रामिंग भाषा)]] की शैली में कार्यात्मक प्रोग्रामिंग के लिए पूर्ण समर्थन, इसकी   विशेषताओं के साथ:
* [[एमएल (प्रोग्रामिंग भाषा)]], [[OCaml|ओकैमल]], और [[हास्केल (प्रोग्रामिंग भाषा)]] की शैली में कार्यात्मक प्रोग्रामिंग के लिए पूर्ण समर्थन, इसकी विशेषताओं के साथ:
** उच्च क्रम के कार्य
** उच्च क्रम के कार्य
** [[पैटर्न मिलान]]
** [[पैटर्न मिलान]]
Line 37: Line 37:
** कार्यों का आंशिक अनुप्रयोग
** कार्यों का आंशिक अनुप्रयोग


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


=== प्रकार का निष्कर्ष ===
=== प्रकार का निष्कर्ष ===
Line 79: Line 79:
डेफ एक्स =
डेफ एक्स =
   {// x = 3 के समान
   {// x = 3 के समान
    डीईएफ़ वाई = 1;
  डीईएफ़ वाई = 1;
    डेफ जेड = 2;
  डेफ जेड = 2;
    y + z // यह अंतिम कथन एक ब्लॉक रिटर्न वैल्यू है
  y + z // यह अंतिम कथन एक ब्लॉक रिटर्न वैल्यू है
   };
   };


डेफ एक्स =
डेफ एक्स =
   if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) // if, using, try भी भाव हैं
   if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) // if, using, try भी भाव हैं
    सोमवार
  सोमवार
   अन्य
   अन्य
    दूसरे कल ;
  दूसरे कल�;


def x = int.Parse (कुछ स्ट्रिंग) आज़माएं
def x = int.Parse (कुछ स्ट्रिंग) आज़माएं
        पकड़ो { | स्वरूप अपवाद () => 0};
  पकड़ो { | स्वरूप अपवाद () => 0};


डीईएफ़ एक्स = रिटर्नब्लॉक:
डीईएफ़ एक्स = रिटर्नब्लॉक:
   {
   {
    foreach (मैं [1, 2, 3] में)
  foreach (मैं [1, 2, 3] में)
      जब (मैं > 2)
  जब (मैं > 2)
        रिटर्नब्लॉक (सत्य); // बाहर निकलें ब्लॉक (एक्स = सच)
  रिटर्नब्लॉक (सत्य); // बाहर निकलें ब्लॉक (एक्स = सच)


    असत्य // x = असत्य
  असत्य // x = असत्य
   };
   };
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 206: Line 206:


=== प्रकार ===
=== प्रकार ===
वेरिएंट (एसएमएल और [[OCaml|ओकैमल]] में डेटा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के डेटा को व्यक्त करने के रूप हैं:
वेरिएंट (एसएमएल और [[OCaml|ओकैमल]] में डेटा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के डेटा को व्यक्त करने के रूप हैं:
<वाक्यविन्यास लैंग = निमेरल><syntaxhighlight>
<वाक्यविन्यास लैंग = निमेरल><syntaxhighlight>
variant RgbColor {
variant RgbColor {
Line 220: Line 220:
</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 264: Line 264:
{
{
   /*
   /*
    <[ ]> अर्ध-उद्धरण के एक क्षेत्र को परिभाषित करता है, नेमेरल कंपाइलर इसमें कोड को बदल देता है
  <[ ]> अर्ध-उद्धरण के एक क्षेत्र को परिभाषित करता है, नेमेरल कंपाइलर इसमें कोड को बदल देता है
    एएसटी के लिए, ऐसे परिवर्तन कुछ सीमा तक सी # में संकलित अभिव्यक्ति के समान हैं
  एएसटी के लिए, ऐसे परिवर्तन कुछ सीमा तक सी # में संकलित अभिव्यक्ति के समान हैं
   */
   */
   <[
   <[
    मैच ($ cond: बूल)
  मैच ($ cond: बूल)
    {
  {
      | सच => $e1
  | सच => $e1
      | _ => $e2
  | _ => $e2
    }
  }
   ]>
   ]>
}
}
Line 323: Line 323:
</syntaxhighlight>
</syntaxhighlight>
   सार्वजनिक स्थैतिक मुख्य (): शून्य {
   सार्वजनिक स्थैतिक मुख्य (): शून्य {
    राइटलाइन (हैलो)
  राइटलाइन (हैलो)
   }
   }


   स्थिर फू (एक्स: इंट): शून्य {
   स्थिर फू (एक्स: इंट): शून्य {
    यदि (एक्स == 3) {
  यदि (एक्स == 3) {
      डीईएफ़ वाई = एक्स * 42;
  डीईएफ़ वाई = एक्स * 42;
      फू (एक्स)
  फू (एक्स)
    } अन्य {
  } अन्य {
      [एक्स]। नक्शा (मजेदार (एक्स) {
  [एक्स]। नक्शा (मजेदार (एक्स) {
        एक्स * 2
  एक्स * 2
      })
  })
    }
  }
   }
   }


   स्टेटिक बार (): int {
   स्टेटिक बार (): int {
    डेफ फू = 2 + 7 * 13;
  डेफ फू = 2 + 7 * 13;
    फू
  फू
   }
   }
}
}
Line 370: Line 370:
वर्ग फूबार
वर्ग फूबार
   सार्वजनिक स्थैतिक मुख्य (): शून्य
   सार्वजनिक स्थैतिक मुख्य (): शून्य
    राइटलाइन (हैलो)
  राइटलाइन (हैलो)


   स्थिर फू (एक्स: इंट): शून्य
   स्थिर फू (एक्स: इंट): शून्य
    यदि (एक्स == 3)
  यदि (एक्स == 3)
      डीईएफ़ वाई = एक्स * 42;
  डीईएफ़ वाई = एक्स * 42;
      फू (एक्स)
  फू (एक्स)
    अन्य
  अन्य
      [एक्स]। नक्शा (मजेदार (एक्स) {
  [एक्स]। नक्शा (मजेदार (एक्स) {
        एक्स * 2
  एक्स * 2
      })
  })


   स्टेटिक बार (): इंट
   स्टेटिक बार (): इंट
    डेफ फू = 2 + 7 * 13
  डेफ फू = 2 + 7 * 13
    फू
  फू
    
    
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 395: Line 395:
स्टेटिक बार (): इंट
स्टेटिक बार (): इंट
   डेफ फू = 2
   डेफ फू = 2
    + 7
  + 7
    * 13
  * 13
   फू
   फू


Line 410: Line 410:
स्टेटिक बार (): इंट
स्टेटिक बार (): इंट
   डेफ फू = 2 \
   डेफ फू = 2 \
    + 7 \
  + 7 \
    * 13
  * 13
   फू
   फू


मिलान
मिलान
   | ए \
   | ए \
   | आ => 1
   | आ => 1
   | बी \
   | बी \
   | बी बी => 2
   | बी बी => 2
   | _ => 0
   | _ => 0
Line 451: Line 451:
   | "bb" => 2
   | "bb" => 2
   | _ => 0
   | _ => 0
</syntaxhighlight>इस सिंटैक्स को सक्रिय करने के लिए, उपयोगकर्ता को जोड़ना होगा फ़ाइल के शीर्ष पर <code>#pragma indent</code> या कंपाइलर विकल्प<code>-i</code>का उपयोग करें।
</syntaxhighlight>इस सिंटैक्स को सक्रिय करने के लिए, उपयोगकर्ता को जोड़ना होगा फ़ाइल के शीर्ष पर <code>#pragma indent</code> या कंपाइलर विकल्प<code>-i</code>का उपयोग करें।


== आईडीई ==
== आईडीई ==
नेमर्ले को [[एकीकृत विकास पर्यावरण]] (आईडीई) [[Visual Studio 2008|विजुअल स्टूडियो 2008]] में एकीकृत किया जा सकता है। इसमें विजुअल स्टूडियो 2008 शेल पर आधारित एक पूरी तरह से निःशुल्क आईडीई भी है।<ref>[https://code.google.com/p/nemerle/downloads/list Nemerle Studio Microsoft Setup Installer] can be installed after installing [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=aca38719-f449-4937-9bac-45a9f8a73822&displaylang=en Visual Studio Shell 2008 Isolated]</ref> ([[विजुअल स्टूडियो]] एक्सप्रेस एडिशन की तरह) और [[SharpDevelop]] ([https://code.google.com/p/nemerle/source/browse/#svn%2Fnemerle%2Ftrunk%2Fsnippets%2Fsharpdevelop लिंक टू प्लगइन सोर्स कोड])।
नेमर्ले को [[एकीकृत विकास पर्यावरण]](आईडीई) [[Visual Studio 2008|विजुअल स्टूडियो 2008]] में एकीकृत किया जा सकता है। इसमें विजुअल स्टूडियो 2008 शेल पर आधारित एक पूरी तरह से निःशुल्क आईडीई भी है।<ref>[https://code.google.com/p/nemerle/downloads/list Nemerle Studio Microsoft Setup Installer] can be installed after installing [http://www.microsoft.com/downloads/en/details.aspx?FamilyID=aca38719-f449-4937-9bac-45a9f8a73822&displaylang=en Visual Studio Shell 2008 Isolated]</ref> ([[विजुअल स्टूडियो]] एक्सप्रेस एडिशन की तरह) और [[SharpDevelop]] ([https://code.google.com/p/nemerle/source/browse/#svn%2Fnemerle%2Ftrunk%2Fsnippets%2Fsharpdevelop लिंक टू प्लगइन सोर्स कोड])।


ऐड-इन्स और एक्सटेंशन का उपयोग करके नेमर्ले को विजुअल स्टूडियो (2017 तक) में भी एकीकृत किया जा सकता है।<ref>[http://visualstudiogallery.msdn.microsoft.com/5d93dc0a-0ce9-4b97-970c-ab1993eb934a Visual Studio 2010 add-in]</ref>
ऐड-इन्स और एक्सटेंशन का उपयोग करके नेमर्ले को विजुअल स्टूडियो (2017 तक) में भी एकीकृत किया जा सकता है।<ref>[http://visualstudiogallery.msdn.microsoft.com/5d93dc0a-0ce9-4b97-970c-ab1993eb934a Visual Studio 2010 add-in]</ref>
== उदाहरण ==
== उदाहरण ==


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


<वाक्यविन्यास लैंग = निमेरल>
<वाक्यविन्यास लैंग = निमेरल>
Line 467: Line 467:
   स्थैतिक मुख्य (): शून्य
   स्थैतिक मुख्य (): शून्य
   {
   {
    System.Console.WriteLine (हैलो, विश्व!);
  System.Console.WriteLine (हैलो, विश्व!);
   }
   }
}
}
Line 483: Line 483:
==== स्ट्रिंग स्वरूपण ====
==== स्ट्रिंग स्वरूपण ====
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को स्ट्रिंग जोड़तोड़ के लिए सरल करता है:
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को स्ट्रिंग जोड़तोड़ के लिए सरल करता है:
<वाक्यविन्यास लैंग = निमेरल>
<वाक्यविन्यास लैंग = निमेरल>
def s = $ संख्या $i है; // वेरिएबल i का मान डालें जहाँ $i रखा गया है
def s = $ संख्या $i है; // वेरिएबल i का मान डालें जहाँ $i रखा गया है
Line 496: Line 497:
वर्ग नमूना
वर्ग नमूना
{
{
  [मेमोइज़] // पहले मूल्यांकन परिणाम याद रखें
  [मेमोइज़] // पहले मूल्यांकन परिणाम याद रखें
  सार्वजनिक स्थैतिक कुछ लंबा मूल्यांकन (): int
  सार्वजनिक स्थैतिक कुछ लंबा मूल्यांकन (): int
  {
  {
      MathLib.CalculateNthPrime(10000000)
  MathLib.CalculateNthPrime(10000000)
  }
  }


  [निर्भरता संपत्ति] // WPF निर्भरता संपत्ति
  [निर्भरता संपत्ति] // WPF निर्भरता संपत्ति
  सार्वजनिक निर्भरता संपत्ति नमूना {प्राप्त करें; तय करना; }
  सार्वजनिक निर्भरता संपत्ति नमूना {प्राप्त करें; तय करना; }
 
 
  सार्वजनिक स्थैतिक मुख्य (): शून्य
  सार्वजनिक स्थैतिक मुख्य (): शून्य
  {
  {
/* सिंटैक्स मैक्रो json कोड उत्पन्न करता है:
/* सिंटैक्स मैक्रो json कोड उत्पन्न करता है:
जॉब्जेक्ट.ऑब्जेक्ट ([(ए, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन ())), (बी, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन () + 1))])
जॉब्जेक्ट.ऑब्जेक्ट ([(ए, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन ())), (बी, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन () + 1))])
*/
*/
      def jObject = json {a: SomeLongEvaluations(); बी: (कुछ लंबे मूल्यांकन () + 1)}
  def jObject = json {a: SomeLongEvaluations(); बी: (कुछ लंबे मूल्यांकन () + 1)}
// ऑब्जेक्ट इनिशियलाइज़ेशन मैक्रो <- सी # कर्ली ब्रैकेट्स ऑब्जेक्ट इनिशियलाइज़ेशन का विकास है
// ऑब्जेक्ट इनिशियलाइज़ेशन मैक्रो <- सी # कर्ली ब्रैकेट्स ऑब्जेक्ट इनिशियलाइज़ेशन का विकास है
      def k = डायग्नोस्टिक्स.प्रोसेस () <-
  def k = डायग्नोस्टिक्स.प्रोसेस () <-
      {
  {
          StartInfo <- // सीटीआर कॉल के बिना आंतरिक वस्तुओं के गुणों में प्रवेश कर सकता है
  StartInfo <- // सीटीआर कॉल के बिना आंतरिक वस्तुओं के गुणों में प्रवेश कर सकता है
          {
  {
              फ़ाइलनाम = calc.exe;
  फ़ाइलनाम = calc.exe;
              UseShellExecute = सच;
  UseShellExecute = सच;
          }
  }
          Exited += () => राइटलाइन (कैल्क किया गया); // घटनाएँ और प्रतिनिधि
  Exited += () => राइटलाइन (कैल्क किया गया); // घटनाएँ और प्रतिनिधि
      }
  }


      पढ़ने के लिए लाइन();
  पढ़ने के लिए लाइन();
  }
  }
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 529: Line 530:
====डेटाबेस पहुंच ====
====डेटाबेस पहुंच ====


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


<वाक्यविन्यास लैंग = निमेरल>
<वाक्यविन्यास लैंग = निमेरल>
ExecuteReaderLoop (पहले नाम का चयन करें, कर्मचारी से अंतिम नाम जहां पहला नाम = $ myparm, dbcon,
ExecuteReaderLoop (पहले नाम का चयन करें, कर्मचारी से अंतिम नाम जहां पहला नाम = $ myparm, dbcon,
   {
   {
    राइटलाइन ($ नाम: $firstname $lastname )
  राइटलाइन ($ नाम: $firstname $lastname )
   });
   });
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 548: Line 549:
   (NpgsqlReader रीडर = dbcmd.ExecuteReader ()) का उपयोग करना
   (NpgsqlReader रीडर = dbcmd.ExecuteReader ()) का उपयोग करना
   {
   {
    जबकि (पाठक। पढ़ें ())
  जबकि (पाठक। पढ़ें ())
    {
  {
        वर प्रथम नाम = पाठक.GetString (0);
  वर प्रथम नाम = पाठक.GetString (0);
        var अंतिम नाम = पाठक। गेटस्ट्रिंग (1);
  var अंतिम नाम = पाठक। गेटस्ट्रिंग (1);
        कंसोल.राइटलाइन (नाम: {0} {1}, पहला नाम, अंतिम नाम)
  कंसोल.राइटलाइन (नाम: {0} {1}, पहला नाम, अंतिम नाम)
    }
  }
   }
   }
}
}
Line 561: Line 562:


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


<वाक्यविन्यास लैंग = नेमर्ले>
<वाक्यविन्यास लैंग = नेमर्ले>
Line 567: Line 568:
सिंटैक्स ( ford , ( , i ; , start ) , body)
सिंटैक्स ( ford , ( , i ; , start ) , body)
{
{
  <[ for ($i = $begin; $i >= 0; $i--) $body ]>
  <[ for ($i = $begin; $i >= 0; $i--) $body ]>
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 576: Line 577:


=== ASP.NET === के साथ नेमर्ले  
=== ASP.NET === के साथ नेमर्ले  
नेमर्ले को या तो सीधे ASP.NET में एम्बेड किया जा सकता है:
नेमर्ले को या तो सीधे ASP.NET में एम्बेड किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस>
<वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस>
<%@ पृष्ठ भाषा = नेमर्ले %>
<%@ पृष्ठ भाषा = नेमर्ले %>
<स्क्रिप्ट रनैट = सर्वर>
<स्क्रिप्ट रनैट = सर्वर>


    पेज_लोड (_: ऑब्जेक्ट, _: इवेंटआर्ग): शून्य {
  पेज_लोड (_: ऑब्जेक्ट, _: इवेंटआर्ग): शून्य {
        Message.Text = $ आप पिछली बार इस पेज पर पहुंचे थे: $(DateTime.Now);
  Message.Text = $ आप पिछली बार इस पेज पर पहुंचे थे: $(DateTime.Now);
    }
  }


    EnterBtn_Click(_ : वस्तु, _ : EventArgs): शून्य {
  EnterBtn_Click(_ : वस्तु, _ : EventArgs): शून्य {
        Message.Text = $ Hi $(Name.Text), ASP.NET में आपका स्वागत है! ;
  Message.Text = $ Hi $(Name.Text), ASP.NET में आपका स्वागत है!!;
    }
  }


</स्क्रिप्ट>
</स्क्रिप्ट>


<एचटीएमएल>
<एचटीएमएल>
    <शरीर>
  <शरीर>
        <फॉर्म रनैट = सर्वर>
  <फॉर्म रनैट = सर्वर>
            कृपया अपना नाम अंकित करें: <एएसपी: टेक्स्टबॉक्स आईडी = नाम रनैट = सर्वर />
  कृपया अपना नाम अंकित करें: <एएसपी: टेक्स्टबॉक्स आईडी = नाम रनैट = सर्वर />
            <एएसपी: बटन ऑनक्लिक = एंटरबीटीएन_क्लिक टेक्स्ट = रनैट अंकित करें = सर्वर />
  <एएसपी: बटन ऑनक्लिक = एंटरबीटीएन_क्लिक टेक्स्ट = रनैट अंकित करें = सर्वर />


             <p><asp:लेबल आईडी= संदेश रनैट= सर्वर /></p>
             <p><asp:लेबल आईडी= संदेश रनैट= सर्वर /></p>
        </रूप>
  </रूप>
    </शरीर>
  </शरीर>
</html>
</html>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
... या एक अलग फ़ाइल में संग्रहीत और एक पंक्ति के साथ अंकित किया गया:
... या एक अलग फ़ाइल में संग्रहीत और एक पंक्ति के साथ अंकित किया गया:
<वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस>
<वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस>
<%@ पृष्ठ भाषा = नेमर्ले Src= test.n Inherits= Test %>
<%@ पृष्ठ भाषा = नेमर्ले Src= test.n Inherits= Test %>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 611: Line 612:


<वाक्यविन्यास प्रकाश लैंग = csharp>
<वाक्यविन्यास प्रकाश लैंग = csharp>
प्रणाली का उपयोग करना;
प्रणाली का उपयोग करना;
System.Runtime.InteropServices का उपयोग करना;
System.Runtime.InteropServices का उपयोग करना;


क्लास प्लेटफार्म इनवोकटेस्ट
क्लास प्लेटफार्म इनवोकटेस्ट
{
{
    [DllImport( msvcrt.dll )]
  [DllImport( msvcrt.dll )]
    सार्वजनिक बाहरी स्थैतिक डालता है (सी: स्ट्रिंग): int;
  सार्वजनिक बाहरी स्थैतिक डालता है (सी: स्ट्रिंग): int;


    [DllImport( msvcrt.dll )]
  [DllImport( msvcrt.dll )]
    आंतरिक बाहरी स्थिर _flushall (): int;
  आंतरिक बाहरी स्थिर _flushall (): int;


    सार्वजनिक स्थैतिक मुख्य (): शून्य
  सार्वजनिक स्थैतिक मुख्य (): शून्य
    {
  {
        _ = डालता है (टेस्ट);
  _ = डालता है (टेस्ट);
        _ = _flushall ();
  _ = _flushall ();
    }
  }
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 633: Line 634:
{{Reflist}}
{{Reflist}}
==अग्रिम पठन==
==अग्रिम पठन==
*[http://rsdn.ru/summary/3766.xml Publications about नेमर्ले in RSDN Magazine, Russian official science magazine]
*[http://rsdn.ru/summary/3766.xml Publications about नेमर्ले in RSDN Magazine, Russian official science magazine]
*{{cite journal|last=Moskal|first=Michał|date=27 June 2005|title=Type Inference with Deferral|publisher=Institute of Computer Science, University of Wrocław|url=http://research.microsoft.com/en-us/um/people/moskal/pdf/msc.pdf}}
*{{cite journal|last=Moskal|first=Michał|date=27 June 2005|title=Type Inference with Deferral|publisher=Institute of Computer Science, University of Wrocław|url=http://research.microsoft.com/en-us/um/people/moskal/pdf/msc.pdf}}
* [http://www.slideshare.net/rystsov/nemerle-is-notable Presentation "नेमर्ले is notable" by Denis Rystsov]
* [http://www.slideshare.net/rystsov/nemerle-is-notable Presentation "नेमर्ले is notable" by Denis Rystsov]
* [http://www.osp.ru/os/2011/05/13009416/ Article "Unconventional languages for unconventional supercomputers" by Andrey Adinetz]
* [http://www.osp.ru/os/2011/05/13009416/ Article "Unconventional languages for unconventional supercomputers" by Andrey Adinetz]
==बाहरी संबंध==
==बाहरी संबंध==
Line 641: Line 642:
*[https://github.com/rsdn/nemerle GitHub project and repository (new development)]
*[https://github.com/rsdn/nemerle GitHub project and repository (new development)]
*[https://code.google.com/p/nemerle/ Google Code project and repository (old development)]
*[https://code.google.com/p/nemerle/ Google Code project and repository (old development)]
*[https://groups.google.com/group/nemerle-en नेमर्ले Forum]
*[https://groups.google.com/group/nemerle-en नेमर्ले Forum]
*[http://research.microsoft.com/en-us/events/sscli2005/pacholski-moskal.pdf नेमर्ले presentation on Microsoft Research SSCLI RFP II Capstone 2005 workshop]
*[http://research.microsoft.com/en-us/events/sscli2005/pacholski-moskal.pdf नेमर्ले presentation on Microsoft Research SSCLI RFP II Capstone 2005 workshop]
*[http://www.99-bottles-of-beer.net/language-nemerle-869.html नेमर्ले at 99 Bottles of Beer]
*[http://www.99-bottles-of-beer.net/language-nemerle-869.html नेमर्ले at 99 Bottles of Beer]


{{Common Language Infrastructure}}
{{Common Language Infrastructure}}

Revision as of 07:11, 4 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

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

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

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

विशेषताएं

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

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

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

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]

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

डेफ एक्स = 1; // इंट मेरी सूची को परिभाषित करें = सूची (); // सामान्य सूची [टी], टाइप टी को अगली पंक्ति में उपयोग से घटाया जाता है myList.Add (एक्स); // कंपाइलर टी के प्रकार को घटाता है जैसे कि मेरी सूची प्रकार [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
  };

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

डेफ एक्स =

 {// x = 3 के समान
 डीईएफ़ वाई = 1;
 डेफ जेड = 2;
 y + z // यह अंतिम कथन एक ब्लॉक रिटर्न वैल्यू है
 };

डेफ एक्स =

 if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) // if, using, try भी भाव हैं
 सोमवार
 अन्य
 दूसरे कल�;

def x = int.Parse (कुछ स्ट्रिंग) आज़माएं

 पकड़ो { | स्वरूप अपवाद () => 0};

डीईएफ़ एक्स = रिटर्नब्लॉक:

 {
 foreach (मैं [1, 2, 3] में)
 जब (मैं > 2)
 रिटर्नब्लॉक (सत्य); // बाहर निकलें ब्लॉक (एक्स = सच)
 असत्य // x = असत्य
 };

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

टुपल्स

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

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

डेफ के = (1, एक); // के: (इंट * स्ट्रिंग) डीईएफ़ (ए, बी) = के; // ए = 1, बी = एक </वाक्यविन्यास हाइलाइट>

पैटर्न मिलान

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

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

डीईएफ़ परिणाम = मैच (संख्या) {

 | 0 => शून्य
 | 1 => एक
 | x जब x <0 => ऋणात्मक
 | _ => एक से अधिक

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

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

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

System.Console का उपयोग करना; // कक्षाएं और मॉड्यूल (स्थैतिक वर्ग) नामस्थान में रखे जा सकते हैं def अगला (x) { x + 1}; // x तर्क के प्रकार और अन्य प्रकार्य तर्कों को उपयोग से घटाया जा सकता है

डीईएफ़ मल्टी (एक्स, वाई) {एक्स * वाई};

डीईएफ़ फिबोनैकी (मैं) {

 | 0 => 0
 | 1 => 1
 | अन्य => फाइबोनैचि (i - 1) + फाइबोनैचि (i - 2)

};

राइटलाइन (अगला (9)); // 10 कंसोल के समान। राइटलाइन (अगला (9)); राइटलाइन (मल्टी (2, 2)); // 4 राइटलाइन (फाइबोनैचि (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
}
यदि मैक्रो उदाहरण:

<वाक्यविन्यास लैंग = निमेरल> मैक्रो @if (cond, e1, e2) सिंटैक्स (यदि, (, cond,), e1, वैकल्पिक (;), और, e2) {

 /*
 <[ ]> अर्ध-उद्धरण के एक क्षेत्र को परिभाषित करता है, नेमेरल कंपाइलर इसमें कोड को बदल देता है
 एएसटी के लिए, ऐसे परिवर्तन कुछ सीमा तक सी # में संकलित अभिव्यक्ति के समान हैं
 */
 <[
 मैच ($ cond: बूल)
 {
 | सच => $e1
 | _ => $e2
 }
 ]>

}

// कोड में इस मैक्रो का उपयोग करना: डीईएफ़ मैक्स = यदि (ए> बी) एक और बी; // एक संकलन समय के समय ऊपरी रेखा को इसमें बदल दिया जाएगा: डीईएफ़ मैक्स = मैच (ए> बी) {

 | सच => ए
 | _ => बी

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

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

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

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

<वाक्यविन्यास लैंग = नेमर्ले> System.Console का उपयोग करना;

[कुक्स]

कक्षा फूबार {

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
  }
}
 सार्वजनिक स्थैतिक मुख्य (): शून्य {
 राइटलाइन (हैलो)
 }
 स्थिर फू (एक्स: इंट): शून्य {
 यदि (एक्स == 3) {
 डीईएफ़ वाई = एक्स * 42;
 फू (एक्स)
 } अन्य {
 [एक्स]। नक्शा (मजेदार (एक्स) {
 एक्स * 2
 })
 }
 }
 स्टेटिक बार (): int {
 डेफ फू = 2 + 7 * 13;
 फू
 }

}

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

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

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

<वाक्यविन्यास लैंग = नेमर्ले> System.Console का उपयोग करना;

[कुक्स] \ वर्ग फूबार

 सार्वजनिक स्थैतिक मुख्य (): शून्य
 राइटलाइन (हैलो)
 स्थिर फू (एक्स: इंट): शून्य
 यदि (एक्स == 3)
 डीईएफ़ वाई = एक्स * 42;
 फू (एक्स)
 अन्य
 [एक्स]। नक्शा (मजेदार (एक्स) {
 एक्स * 2
 })
 स्टेटिक बार (): इंट
 डेफ फू = 2 + 7 * 13
 फू
 

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

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

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

// यह संकलित नहीं होगा ...

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

 डेफ फू = 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 शेल पर आधारित एक पूरी तरह से निःशुल्क आईडीई भी है।[5] (विजुअल स्टूडियो एक्सप्रेस एडिशन की तरह) और SharpDevelop (लिंक टू प्लगइन सोर्स कोड)।

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

उदाहरण

हैलो, विश्व!

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

<वाक्यविन्यास लैंग = निमेरल> क्लास हैलो {

 स्थैतिक मुख्य (): शून्य
 {
 System.Console.WriteLine (हैलो, विश्व!);
 }

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

या अधिक बस:

<वाक्यविन्यास लैंग = निमेरल> System.Console.WriteLine (हैलो, विश्व!); </वाक्यविन्यास हाइलाइट>

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

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

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

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

<वाक्यविन्यास लैंग = निमेरल> def s = $ संख्या $i है; // वेरिएबल i का मान डालें जहाँ $i रखा गया है def s = $ $x + $y = $(x+y); // $(...) का उपयोग गणना करने या सदस्यों तक पहुंचने के लिए किया जा सकता है </वाक्यविन्यास हाइलाइट>

घोषणात्मक कोड जनरेशन

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

<वाक्यविन्यास लैंग = निमेरल> [संरचनात्मक समानता] // IEquatable [नमूना] प्रयुक्त करें। तत्व तुलना समानता का उपयोग करके नेट इंटरफ़ेस। वर्ग नमूना {

 [मेमोइज़] // पहले मूल्यांकन परिणाम याद रखें
 सार्वजनिक स्थैतिक कुछ लंबा मूल्यांकन (): int
 {
 MathLib.CalculateNthPrime(10000000)
 }
 [निर्भरता संपत्ति] // WPF निर्भरता संपत्ति
 सार्वजनिक निर्भरता संपत्ति नमूना {प्राप्त करें; तय करना; }
 
 सार्वजनिक स्थैतिक मुख्य (): शून्य
 {

/* सिंटैक्स मैक्रो json कोड उत्पन्न करता है: जॉब्जेक्ट.ऑब्जेक्ट ([(ए, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन ())), (बी, जेवैल्यू.नंबर (कुछ लंबे मूल्यांकन () + 1))])

  • /
 def jObject = json {a: SomeLongEvaluations(); बी: (कुछ लंबे मूल्यांकन () + 1)}

// ऑब्जेक्ट इनिशियलाइज़ेशन मैक्रो <- सी # कर्ली ब्रैकेट्स ऑब्जेक्ट इनिशियलाइज़ेशन का विकास है

 def k = डायग्नोस्टिक्स.प्रोसेस () <-
 {
 StartInfo <- // सीटीआर कॉल के बिना आंतरिक वस्तुओं के गुणों में प्रवेश कर सकता है
 {
 फ़ाइलनाम = calc.exe;
 UseShellExecute = सच;
 }
 Exited += () => राइटलाइन (कैल्क किया गया); // घटनाएँ और प्रतिनिधि
 }
 पढ़ने के लिए लाइन();
 }

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

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

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

<वाक्यविन्यास लैंग = निमेरल> ExecuteReaderLoop (पहले नाम का चयन करें, कर्मचारी से अंतिम नाम जहां पहला नाम = $ myparm, dbcon,

 {
 राइटलाइन ($ नाम: $firstname $lastname )
 });

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

के अतिरिक्त

<वाक्यविन्यास लैंग = निमेरल> स्ट्रिंग एसक्यूएल = पहले नाम का चयन करें, कर्मचारी से अंतिम नाम जहां पहला नाम =: ए; (NpgsqlCommand dbcmd = new NpgsqlCommand (sql, dbcon, dbtran) का उपयोग करके) {

 dbcmd.Parameters.Add (ए, myparm);
 (NpgsqlReader रीडर = dbcmd.ExecuteReader ()) का उपयोग करना
 {
 जबकि (पाठक। पढ़ें ())
 {
 वर प्रथम नाम = पाठक.GetString (0);
 var अंतिम नाम = पाठक। गेटस्ट्रिंग (1);
 कंसोल.राइटलाइन (नाम: {0} {1}, पहला नाम, अंतिम नाम)
 }
 }

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

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

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

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

<वाक्यविन्यास लैंग = नेमर्ले> मैक्रो रिवर्सफॉर (i, start, body) सिंटैक्स ( ford , ( , i ; , start ) , body) {

 <[ for ($i = $begin; $i >= 0; $i--) $body ]>

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

एक मैक्रो को परिभाषित करता है जो परिचय देता है ford (EXPR ; EXPR) EXPR सिंटैक्स और जैसे उपयोग किया जा सकता है

फोर्ड (आई; एन) प्रिंट (आई);

=== ASP.NET === के साथ नेमर्ले नेमर्ले को या तो सीधे ASP.NET में एम्बेड किया जा सकता है: <वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस> <%@ पृष्ठ भाषा = नेमर्ले %> <स्क्रिप्ट रनैट = सर्वर>

 पेज_लोड (_: ऑब्जेक्ट, _: इवेंटआर्ग): शून्य {
 Message.Text = $ आप पिछली बार इस पेज पर पहुंचे थे: $(DateTime.Now);
 }
 EnterBtn_Click(_ : वस्तु, _ : EventArgs): शून्य {
 Message.Text = $ Hi $(Name.Text), ASP.NET में आपका स्वागत है!!;
 }

</स्क्रिप्ट>

<एचटीएमएल>

 <शरीर>
 <फॉर्म रनैट = सर्वर>
 कृपया अपना नाम अंकित करें: <एएसपी: टेक्स्टबॉक्स आईडी = नाम रनैट = सर्वर />
 <एएसपी: बटन ऑनक्लिक = एंटरबीटीएन_क्लिक टेक्स्ट = रनैट अंकित करें = सर्वर />

<asp:लेबल आईडी= संदेश रनैट= सर्वर />

 </रूप>
 </शरीर>

</html> </वाक्यविन्यास हाइलाइट> ... या एक अलग फ़ाइल में संग्रहीत और एक पंक्ति के साथ अंकित किया गया: <वाक्यविन्यास प्रकाश लैंग = एएसपीएक्स-सीएस> <%@ पृष्ठ भाषा = नेमर्ले Src= test.n Inherits= Test %> </वाक्यविन्यास हाइलाइट>

पी इनवोक

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

<वाक्यविन्यास प्रकाश लैंग = csharp> प्रणाली का उपयोग करना; System.Runtime.InteropServices का उपयोग करना;

क्लास प्लेटफार्म इनवोकटेस्ट {

 [DllImport( msvcrt.dll )]
 सार्वजनिक बाहरी स्थैतिक डालता है (सी: स्ट्रिंग): int;
 [DllImport( msvcrt.dll )]
 आंतरिक बाहरी स्थिर _flushall (): int;
 सार्वजनिक स्थैतिक मुख्य (): शून्य
 {
 _ = डालता है (टेस्ट);
 _ = _flushall ();
 }

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

संदर्भ

  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

अग्रिम पठन

बाहरी संबंध