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

बुध वास्तविक दुनिया के उपयोग के लिए बनाई गई एक कार्यात्मक तर्क प्रोग्रामिंग भाषा है। सोमोगी की देखरेख में फर्गस हेंडरसन, थॉमस कॉनवे और ज़ोल्टन सोमोगी द्वारा मेलबोर्न विश्वविद्यालय, कंप्यूटर विज्ञान विभाग में पहला संस्करण विकसित किया गया था, और 8 अप्रैल, 1995 को जारी किया गया था।

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

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

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

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

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

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

मरकरी में लिखे जाने वाले उल्लेखनीय कार्यक्रमों में मरकरी कंपाइलर और प्रिंस एक्सएमएल फॉर्मेटर शामिल हैं। सॉफ्टवेयर कंपनी ODASE भी अपने ओन्टोलॉजी-सेंट्रिक सॉफ्टवेयर डेवलपमेंट प्लेटफॉर्म ODASE को विकसित करने के लिए मरकरी का उपयोग कर रही है।

बैक-एंड्स
मर्करी के कई बैक-एंड हैं, जो मर्करी कोड को कई भाषाओं में संकलित करने में सक्षम हैं, जिनमें शामिल हैं:

उत्पादन स्तर

 * जीएनयू संकलक संग्रह (जीसीसी) के लिए निम्न-स्तरीय सी (प्रोग्रामिंग भाषा), मूल पारा बैक-एंड
 * उच्च स्तरीय सी
 * जावा (प्रोग्रामिंग भाषा)
 * सी शार्प (प्रोग्रामिंग भाषा)|सी#

अतीत

 * जीसीसी बैक-एंड के माध्यम से असेंबली भाषा
 * अदिति, एक डिडक्टिव डेटाबेस सिस्टम भी मेलबर्न विश्वविद्यालय में विकसित हुआ। बुध-0.12.2 अदिति का समर्थन करने वाला अंतिम संस्करण है।
 * .NET फ्रेमवर्क के लिए सामान्य मध्यवर्ती भाषा  (CIL)।
 * एरलांग (प्रोग्रामिंग भाषा)

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

सबसे अधिक इस्तेमाल किया जाने वाला बैक-एंड मूल निम्न-स्तरीय C बैक-एंड है।

उदाहरण
हैलो वर्ल्ड प्रोग्राम: 10वीं फाइबोनैचि संख्या की गणना (सबसे स्पष्ट तरीके से): एक स्टेट वेरिएबल है, जो वेरिएबल्स की एक जोड़ी के लिए सिंटैक्टिक चीनी है, जिन्हें संकलन पर ठोस नाम दिए गए हैं; उदाहरण के लिए, ऊपर की तरह कुछ करने के लिए desugared है:

रिलीज शेड्यूल
पहले तेरह स्थिर रिलीज़ के लिए स्थिर रिलीज़ नामकरण योजना 0.1 से 0.13 तक थी। फरवरी 2010 में मरकरी परियोजना ने रिलीज़ के वर्ष और महीने का उपयोग करके प्रत्येक स्थिर रिलीज़ को नाम देने का निर्णय लिया। उदाहरण के लिए 10.04 अप्रैल 2010 में रिलीज़ के लिए है।

विकास प्रणाली रिलीज़ ऑफ़ द डे (ROTD) का एक आवधिक स्नैपशॉट भी अक्सर होता है

आईडीई और संपादक समर्थन

 * डेवलपर्स विम (पाठ संपादक) के लिए समर्थन प्रदान करते हैं
 * Emacs के लिए फ्लाईचेक लाइब्रेरी
 * ग्रहण (सॉफ्टवेयर) के लिए एक प्लगइन उपलब्ध है
 * NetBeans के लिए एक प्लगइन उपलब्ध है

यह भी देखें

 * करी (प्रोग्रामिंग भाषा), एक और कार्यात्मक तर्क भाषा
 * ऐलिस (प्रोग्रामिंग भाषा), मानक एमएल की एक बोली भाषा
 * लॉगटॉक, भाषा, प्रोलॉग का एक ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन जो प्रोलॉग को संकलित करता है
 * ओज (प्रोग्रामिंग भाषा) | ओज/मोजार्ट, एक बहुप्रतिमान भाषा
 * विजुअल प्रोलॉग, भाषा, एक नए सिंटैक्स के साथ प्रोलॉग का दृढ़ता से टाइप किया गया ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन