नेमर्ले: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Infobox programming language
नेमर्ले सामान्य-उद्देश्य, [[उच्च स्तरीय प्रोग्रामिंग भाषा|उच्च स्तरीय]], वैधानिक रूप से [[स्थिर टाइपिंग|स्थिर लिखी गयी]] [[कार्यात्मक प्रोग्रामिंग|प्रोग्रामिंग]] [[प्रोग्रामिंग भाषा|भाषा]] है। कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर (.NET/Mono) का उपयोग करने वाले प्लेटफार्मों के लिए रूपांकित किया गया है। यह [[कार्यात्मक प्रोग्रामिंग]] , वस्तु-उन्मुख, पक्ष-उन्मुख प्रोग्रामिंग , [[चिंतनशील प्रोग्रामिंग|चिंतनशील]] [[कार्यात्मक प्रोग्रामिंग|प्रोग्रामिंग]] और [[अनिवार्य प्रोग्रामिंग|अनिवार्य]] [[कार्यात्मक प्रोग्रामिंग|प्रोग्रामिंग]] सुविधाएँ प्रदान करता है। इसमें साधारण सी-शार्प अर्थात सी#-जैसे सिंटैक्स और शक्तिशाली [[मेटाप्रोग्रामिंग|मेटाप्रोग्रामिंग प्रणाली]] है।
|name            = Nemerle
|logo            =
|paradigm        = [[Multi-paradigm programming language|Multi-paradigm]]: [[aspect-oriented programming|aspect-oriented]], [[event-driven programming|event-driven]], [[functional programming|functional]], [[generic programming|generic]], [[imperative programming|imperative]], [[metaprogramming|meta]], [[object-oriented programming|object-oriented]], [[reflective programming|reflective]]
|family          = [[C Sharp (programming language)|C#]]
|designers      = Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski, Paweł Olszta at [[Wrocław University]]
|developer      = [[JetBrains]] (formerly) <br /> RSDN
|released        = {{Start date and age|2003}}
|latest release version = 1.2.507.0<ref>[http://nemerle.org/Downloads Nemerle 1.2.507.0]</ref>
|latest release date = {{Start date and age|2016|8|6|df=yes}}
|typing          = [[Type inference|Inferred]], [[Nominal type system|nominal]], [[type system|static]], [[strong and weak typing|strong]]
|implementations = Nemerle
|dialects        =
|influenced_by  = [[C Sharp (programming language)|C#]], [[Lisp (programming language)|Lisp]], [[ML (programming language)|ML]]
|influenced      =
|platform        = [[Common Language Infrastructure|CLI]]
|file ext        = .n
|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 का एक जादूगर|पृथ्वीसमुद्र का जादूगर(विजार्ड ऑफ अर्थसी)]] में पात्र है।


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


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


=== प्रकार का निष्कर्ष ===
=== प्रकार का निष्कर्ष ===
Line 127: Line 106:
</syntaxhighlight>
</syntaxhighlight>
}}
}}
=== कार्यात्मक प्रकार और स्थानीय प्रकार्य ===
=== कार्यात्मक प्रकार और स्थानीय फंक्शन ===
<syntaxhighlight>
<syntaxhighlight>
using System.Console; // classes and modules (static classes) can be put in namespaces
using System.Console; // classes and modules (static classes) can be put in namespaces
Line 146: Line 125:
</syntaxhighlight>
</syntaxhighlight>
=== प्रकार ===
=== प्रकार ===
प्रकार (एसएमएल और [[OCaml|ओकैमल]] में आंकड़ा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के आंकड़े को व्यक्त करने के रूप हैं:
प्रकार(एसएमएल और [[OCaml|ओकैमल]] में डेटा प्रकार या [[योग प्रकार]] कहा जाता है) कई अलग-अलग प्रकार के डेटा को व्यक्त करने के रूप हैं:
<syntaxhighlight>
<syntaxhighlight>
variant RgbColor {
variant RgbColor {
Line 160: Line 139:
</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 189: Line 168:
=== ब्रेसलेस सिंटैक्स ===
=== ब्रेसलेस सिंटैक्स ===


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


निम्नलिखित कर्ली-ब्रेस स्निपेट:<syntaxhighlight>
निम्नलिखित कर्ली-ब्रेस स्निपेट:<syntaxhighlight>
Line 237: Line 216:
     def foo = 2 + 7 * 13
     def foo = 2 + 7 * 13
     foo
     foo
</syntaxhighlight>विशेष रूप से, बैकस्लैश का उपयोग किए बिना कई पंक्तियों में मैचों में अभिव्यक्तियों या वैकल्पिक खंडों को तोड़ना संभव नहीं है <code>\</code>:<syntaxhighlight>
</syntaxhighlight>विशेष रूप से, बैकस्लैश <code>\</code> का उपयोग किए बिना कई पंक्तियों में मैचों में अभिव्यक्तियों या वैकल्पिक खंडों को तोड़ना संभव नहीं है:<syntaxhighlight>
// This will not compile ...
// This will not compile ...


Line 267: Line 246:
   | "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 शेल ([[विजुअल स्टूडियो]] एक्सप्रेस संस्करण की तरह) और SharpDevelop या तीव्र विकास([https://code.google.com/p/nemerle/source/browse/#svn%2Fnemerle%2Ftrunk%2Fsnippets%2Fsharpdevelop लिंक टू प्लगइन सोर्स संहिता] ) पर आधारित पूरी तरह से मुफ्त आईडीई भी है।<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>
नेमर्ले को [[एकीकृत विकास पर्यावरण]](आईडीई) [[Visual Studio 2008|विजुअल स्टूडियो 2008]] में एकीकृत किया जा सकता है। इसमें विजुअल स्टूडियो 2008 शेल ([[विजुअल स्टूडियो]] एक्सप्रेस संस्करण की तरह) और SharpDevelop ([https://code.google.com/p/nemerle/source/browse/#svn%2Fnemerle%2Ftrunk%2Fsnippets%2Fsharpdevelop लिंक टू प्लगइन सोर्स कोड]) पर आधारित पूरी तरह से मुफ्त आईडीई भी है।<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>


ऐड-इन्स और एक्सटेंशन(विस्तार) का उपयोग करके नेमर्ले को विजुअल स्टूडियो (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>
== उदाहरण ==
== उदाहरण ==


===हैलो, विश्व!===
===हैलो, विश्व!===
पारंपरिक हैलो वर्ल्ड! कार्यक्रम अधिक सी #-जैसी फैशन में कार्यान्वित किया जा सकता है:<syntaxhighlight>
पारंपरिक हैलो वर्ल्ड! प्रोग्राम अधिक सी #-जैसी फैशन में कार्यान्वित किया जा सकता है:<syntaxhighlight>
class Hello
class Hello
{
{
Line 289: Line 268:


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


==== स्ट्रिंग स्वरूपण ====
==== स्ट्रिंग स्वरूपण ====
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को तंत्रिका नष्ट और निर्माण के लिए सरल करता है:<syntaxhighlight>
स्ट्रिंग स्वरूपण मैक्रो $ संकेतन का उपयोग करके चर को स्ट्रिंग नष्ट और निर्माण के लिए सरल करता है:<syntaxhighlight>
def s = $"The number is $i"; //insert the value of the variable i where $i is placed  
def s = $"The number is $i"; //insert the value of the variable i where $i is placed  
def s = $"$x + $y = $(x+y)"; // $(...) can be used to make calculations or access members
def s = $"$x + $y = $(x+y)"; // $(...) can be used to make calculations or access members
</syntaxhighlight>
</syntaxhighlight>


==== घोषणात्मक संहिता पीढ़ी ====
==== घोषणात्मक कोड जेनरेशन ====


संरचनात्मक समानता, मेमोइज़, जेसन, और मैक्रोज़ हैं जो संकलन समय में संहिता उत्पन्न करते हैं। चूंकि उनमें से कुछ (संरचनात्मक समानता, मेमोइज़) सी# विशेषताओं की तरह दिख सकते हैं, संकलन के समय, उन्हें संकलक द्वारा जांचा जाएगा और उनके मैक्रोज़ द्वारा पूर्वनिर्धारित तर्क का उपयोग करके उपयुक्त संहिता में बदल दिया जाएगा।<syntaxhighlight>
संरचनात्मक समानता, मेमोइज़, जेसन, और मैक्रोज़ हैं जो संकलन समय में कोड उत्पन्न करते हैं। चूंकि उनमें से कुछ(संरचनात्मक समानता, मेमोइज़) सी# विशेषताओं की तरह दिख सकते हैं, संकलन के समय, उन्हें संकलक द्वारा जांचा जाएगा और उनके मैक्रोज़ द्वारा पूर्वनिर्धारित तर्क का उपयोग करके उपयुक्त कोड में बदल दिया जाएगा।<syntaxhighlight>
[StructuralEquality] // Implement IEquatable[Sample] .Net interface using by element comparison equality.
[StructuralEquality] // Implement IEquatable[Sample] .Net interface using by element comparison equality.
class Sample
class Sample
Line 357: Line 336:
   }
   }
}
}
</syntaxhighlight>और यह केवल लाइब्रेरी में कुछ संचालन छुपा नहीं रहा है, किंतु जिज्ञासा तंत्रिका(क्वेरी स्ट्रिंग) को समझने के लिए संकलक द्वारा किया गया अतिरिक्त कार्य, वहां उपयोग किए जाने वाले चर, और स्तम्भ डेटाबेस से लौटाए गए हैं। ExecuteReaderLoop(रीडरलूप निष्पादित करें) मैक्रो आपको मैन्युअल(स्वनिर्मित) रूप से अंकित करने के लिए सामान्यतः समतुल्य संहिता उत्पन्न करेगा। इसके अतिरिक्त, यह जाँचने के लिए संकलन समय पर डेटाबेस से जुड़ता है कि आपकी एसक्यूएल जिज्ञासा वास्तव में समझ में आती है।
</syntaxhighlight>और यह केवल लाइब्रेरी में कुछ संचालन छुपा नहीं रहा है, किंतु क्वेरी स्ट्रिंग को समझने के लिए संकलक द्वारा किया गया अतिरिक्त कार्य, वहां उपयोग किए जाने वाले चर, और स्तम्भ डेटाबेस से लौटाए गए हैं। ExecuteReaderLoop (रीडरलूप निष्पादित करें) मैक्रो आपको मैन्युअल(स्वनिर्मित) रूप से अंकित करने के लिए सामान्यतः समतुल्य कोड उत्पन्न करेगा। इसके अतिरिक्त, यह जाँचने के लिए संकलन समय पर डेटाबेस से जुड़ता है कि आपकी एसक्यूएल क्वेरी वास्तव में समझ में आती है।


==== नई भाषा का निर्माण ====
==== नई भाषा का निर्माण ====
Line 366: Line 345:
   <[ for ($i = $begin; $i >= 0; $i--) $body ]>
   <[ for ($i = $begin; $i >= 0; $i--) $body ]>
}
}
</syntaxhighlight>ford(EXPR ; EXPR) EXPR सिंटैक्स को प्रस्तुत करते हुए एक मैक्रो को परिभाषित करता है और इसका उपयोग किया जा सकता है:<syntaxhighlight>
</syntaxhighlight>ford(EXPR; EXPR) EXPR सिंटैक्स को प्रस्तुत करते हुए एक मैक्रो को परिभाषित करता है और इसका उपयोग किया जा सकता है:<syntaxhighlight>
ford (i ; n) print (i);
ford (i ; n) print (i);
</syntaxhighlight>
</syntaxhighlight>


=== एएसपी.नेट के साथ नेमेर्ले ===
=== एएसपी.नेट के साथ नेमेर्ले ===
नेमर्ले को या तो सीधे एएसपी'''.'''नेट(ASP.NET) में अंत:स्थापन किया जा सकता है:<syntaxhighlight>
नेमर्ले को या तो सीधे एएसपी'''.'''नेट(ASP.NET) में एम्बेड किया जा सकता है:<syntaxhighlight>
<%@ Page Language="Nemerle" %>
<%@ Page Language="Nemerle" %>
<script runat="server">
<script runat="server">
Line 400: Line 379:


=== पी इनवोक ===
=== पी इनवोक ===
नेमेर्ले वास्तविक मंच पुस्तकालय का लाभ उठा सकता है। सिंटैक्स सी# और अन्य .नेट भाषाओं के समान है। यहाँ सबसे सरल उदाहरण है:<syntaxhighlight>
नेमेर्ले वास्तविक प्लेटफार्म पुस्तकालय का लाभ उठा सकता है। सिंटैक्स सी# और अन्य .नेट भाषाओं के समान है। यहाँ सबसे सरल उदाहरण है:<syntaxhighlight>
using System;
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
Line 435: Line 414:
*[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}}
[[Category:.NET प्रोग्रामिंग लैंग्वेज|Nemerle]]
 
[[Category:2003 में बनाई गई प्रोग्रामिंग लैंग्वेज|Nemerle]]
{{DEFAULTSORT:Nemerle}}[[Category: प्रोग्रामिंग भाषा]] [[Category: प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]] [[Category: .NET प्रोग्रामिंग लैंग्वेज]] [[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]] [[Category: 2003 में बनाई गई प्रोग्रामिंग लैंग्वेज]] [[Category: 2003 सॉफ्टवेयर]] [[Category: उच्च स्तरीय प्रोग्रामिंग भाषाएं]] [[Category: पहलू आधारित प्रोग्रामिंग]] [[Category: कार्यात्मक भाषाएँ]]  
[[Category:2003 सॉफ्टवेयर|Nemerle]]
 
[[Category:CS1 errors|Nemerle]]
 
[[Category:Collapse templates|Nemerle]]
 
[[Category:Created On 18/02/2023|Nemerle]]
[[Category: Machine Translated Page]]
[[Category:Machine Translated Page|Nemerle]]
[[Category:Created On 18/02/2023]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Nemerle]]
[[Category:Official website not in Wikidata|Nemerle]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Templates Vigyan Ready]]

Latest revision as of 10:29, 15 March 2023

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

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

विशेषताएं

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

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

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

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

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

// 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 (लिंक टू प्लगइन सोर्स कोड) पर आधारित पूरी तरह से मुफ्त आईडीई भी है।[4]

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

उदाहरण

हैलो, विश्व!

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

class Hello
{
  static Main () : void
  {
    System.Console.WriteLine ("Hello, world!");
  }
}

या अधिक सरलता से:

System.Console.WriteLine("Hello, world!");

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

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

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

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

def s = $"The number is $i"; //insert the value of the variable i where $i is placed 
def s = $"$x + $y = $(x+y)"; // $(...) can be used to make calculations or access members

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

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

[StructuralEquality] // Implement IEquatable[Sample] .Net interface using by element comparison equality.
class Sample
{
   [Memoize]  // remember first evaluation result 
   public static SomeLongEvaluations() : int  
   {
       MathLib.CalculateNthPrime(10000000)
   }

   [DependencyProperty] // WPF dependency property
   public DependencyPropertySample { get; set; }
   
   public static Main() : void
   {
/* syntax macro "json" generates code: 
JObject.Object([("a", JValue.Number(SomeLongEvaluations())), ("b", JValue.Number(SomeLongEvaluations() + 1))])
*/
       def jObject = json { a: SomeLongEvaluations(); b: (SomeLongEvaluations() + 1)} 
// object initialization macro "<-" is development of C# curly brackets object initialization
       def k = Diagnostics.Process() <- 
       {
          StartInfo <- // can init inner objects properties without ctor call
          {
              FileName = "calc.exe";
              UseShellExecute = true;
          }   
          Exited += () => WriteLine("Calc done"); // events and delegates
       }

       ReadLine();
   }
}

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

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

ExecuteReaderLoop("SELECT firstname, lastname FROM employee WHERE firstname = $myparm", dbcon,
  {
    WriteLine ($"Name: $firstname $lastname")
  });

इसके अतिरिक्त:

string sql = "SELECT firstname, lastname FROM employee WHERE firstname = :a";
using (NpgsqlCommand dbcmd = new NpgsqlCommand (sql, dbcon, dbtran))
{
  dbcmd.Parameters.Add("a", myparm);

  using (NpgsqlReader reader = dbcmd.ExecuteReader())
  {
     while(reader.Read()) 
     {
        var firstname = reader.GetString (0);
        var lastname = reader.GetString (1);
        Console.WriteLine ("Name: {0} {1}", firstname, lastname)
     }
  }
}

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

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

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

macro ReverseFor (i, begin, body)
syntax("ford", "(", i, ";", begin, ")", body)
{
   <[ for ($i = $begin; $i >= 0; $i--) $body ]>
}

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

ford (i ; n) print (i);

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

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

<%@ Page Language="Nemerle" %>
<script runat="server">

    Page_Load(_ : object, _ : EventArgs) : void {
        Message.Text = $"You last accessed this page at: $(DateTime.Now)";
    }

    EnterBtn_Click(_ : object, _ : EventArgs) : void {
        Message.Text = $"Hi $(Name.Text), welcome to ASP.NET!";
    }

</script>

<html>
    <body>
        <form runat="server">
            Please enter your name: <asp:TextBox ID="Name" runat="server" />
            <asp:Button OnClick="EnterBtn_Click" Text="Enter" runat="server" />

            <p><asp:Label ID="Message" runat="server" /></p>
        </form>
    </body>
</html>

..अथवा एक अलग फ़ाइल(लिखित पत्र) में संग्रहीत और एक पंक्ति के साथ अंकित किया गया:

<%@ Page Language="Nemerle" Src="test.n" Inherits="Test" %>

पी इनवोक

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

using System;
using System.Runtime.InteropServices;

class PlatformInvokeTest
{
    [DllImport("msvcrt.dll")]
    public extern static puts(c : string) : int;

    [DllImport("msvcrt.dll")]
    internal extern static _flushall() : int;

    public static Main() : void
    {
        _ = puts("Test");
        _ = _flushall();
    }
}

संदर्भ

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

अग्रिम पठन

बाहरी संबंध