एमएल (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:
{{Other uses|ML (disambiguation){{!}}एमएल}}
{{Other uses|ML (disambiguation){{!}}एमएल}}
{{Infobox programming language
{{Infobox programming language
| name                  = ML
| name                  = एमएल
| logo                  =
| logo                  =
| paradigm              = [[Multi-paradigm programming language|Multi-paradigm]]: [[Functional programming|functional]],  
| paradigm              = [[मल्टी-पैराडाइम प्रोग्रामिंग लैंग्वेज|मल्टी-पैराडाइम]]: [[फंक्शनल प्रोग्रामिंग|फंक्शनल]],
[[Generic programming|generic]], [[Imperative programming|imperative]]
[[जेनेरिक प्रोग्रामिंग|जेनेरिक]], [[आवश्यक प्रोग्रामिंग|अनिवार्य]]
| year                  = {{start date and age|1973}}
| year                  = {{प्रारंभ तिथि और आयु|1973}}
| designer              = [[Robin Milner]] and others at the [[University of Edinburgh]]
| designer              = [[रॉबिन मिलनर]] और [[एडिनबर्ग विश्वविद्यालय]] में अन्य
| developer              =
| developer              =
| latest release version =
| latest release version =
| latest release date    =
| latest release date    =
| typing                = [[Type inference|Inferred]], [[static typing|static]], [[strong typing|strong]]
| typing                = [[प्रकार का अनुमान|अनुमानित]], [[स्थैतिक टाइपिंग|स्थिर]], [[मजबूत टाइपिंग|मजबूत]]
| implementations        =
| implementations        =
| dialects              = [[OCaml]], [[Standard ML]], [[F Sharp (programming language)|F#]]
| dialects              = [[ओकैमल]], [[मानक एमएल]], [[एफ शार्प (प्रोग्रामिंग भाषा)|एफ]]
| influenced by          = [[ISWIM]]
| influenced by          = [[ईस्वीं]]
| influenced            = [[Clojure]], [[Coq]], [[Cyclone (programming language)|Cyclone]], [[C++]], [[Elm (programming language)|Elm]], [[F Sharp (programming language)|F#]], [[F* (programming language)|F*]], [[Haskell (programming language)|Haskell]], [[Idris (programming language)|Idris]], [[Kotlin (programming language)|Kotlin]], [[Miranda (programming language)|Miranda]], [[Nemerle]], [[OCaml]], [[Opa (programming language)|Opa]], [[Erlang (programming language)|Erlang]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Standard ML]]
| influenced            = [[Clojure]], [[Coq]], [[Cyclone (programming language)|Cyclone]], [[C++]], [[Elm (programming language)|Elm]], [[F Sharp (programming language)|F#]], [[F* (programming language)|F*]], [[Haskell (programming language)|Haskell]], [[Idris (programming language)|Idris]], [[Kotlin (programming language)|Kotlin]], [[Miranda (programming language)|Miranda]], [[Nemerle]], [[OCaml]], [[Opa (programming language)|Opa]], [[Erlang (programming language)|Erlang]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Standard ML]]
| operating system      =
| operating system      =
Line 20: Line 20:
| website                =
| website                =
}}
}}
एमएल (मेटा लैंग्वेज) [[सामान्य प्रयोजन प्रोग्रामिंग भाषा|सामान्य प्रयोजन]] की [[कार्यात्मक प्रोग्रामिंग]] भाषा होती है | यह पॉलिमॉर्फिक हिंडले-मिलनर टाइप सिस्टम के उपयोग के लिए जाना जाता है, जो स्पष्ट प्रकार के एनोटेशन की आवश्यकता के बिना स्वचालित रूप से अधिकांश [[अभिव्यक्ति (प्रोग्रामिंग)]] के [[डेटा प्रकार]] को असाइन करता है, और टाइप सुरक्षा सुनिश्चित करता है। औपचारिक प्रमाण है कि उत्तम प्रकार से टाइप किया गया एमएल प्रोग्राम रनटाइम प्रकार की त्रुटियों का कारण नहीं बनता है।<ref>Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.</ref> एमएल फ़ंक्शन तर्कों, [[कचरा संग्रह (कंप्यूटर विज्ञान)|गार्बेज संग्रह (कंप्यूटर विज्ञान)]], [[अनिवार्य प्रोग्रामिंग]], [[कॉल-टू-मूल्य से]] और [[करी]]इंग के लिए पैटर्न मिलान प्रदान करता है। यह प्रोग्रामिंग भाषा अनुसंधान में अत्यधिक उपयोग किया जाता है और यह प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थों का उपयोग करके पूर्ण रूप से निर्दिष्ट और सत्यापित होने वाली कुछ भाषाओं में से है। इसके प्रकार पैटर्न मिलान इसे उत्तम उपाय से अनुकूल बनाते हैं और सामान्यतः अन्य औपचारिक भाषाओं जैसे [[संकलक लेखन]], स्वचालित प्रमेय सिद्ध करने और [[औपचारिक सत्यापन]] में काम करने के लिए उपयोग किया जाता है।
एमएल (मेटा लैंग्वेज) [[सामान्य प्रयोजन प्रोग्रामिंग भाषा|सामान्य प्रयोजन]] की [[कार्यात्मक प्रोग्रामिंग]] भाषा होती है | यह पॉलिमॉर्फिक हिंडले-मिलनर टाइप प्रणाली के उपयोग के लिए जाना जाता है, जो स्पष्ट प्रकार के एनोटेशन की आवश्यकता के बिना स्वचालित रूप से अधिकांश [[अभिव्यक्ति (प्रोग्रामिंग)]] के [[डेटा प्रकार]] को असाइन करता है, और टाइप सुरक्षा सुनिश्चित करता है। औपचारिक प्रमाण है कि उत्तम प्रकार से टाइप किया गया एमएल प्रोग्राम रनटाइम प्रकार की त्रुटियों का कारण नहीं बनता है।<ref>Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.</ref> एमएल फ़ंक्शन तर्कों, [[कचरा संग्रह (कंप्यूटर विज्ञान)|गार्बेज संग्रह (कंप्यूटर विज्ञान)]], [[अनिवार्य प्रोग्रामिंग]], [[कॉल-टू-मूल्य से]] और [[करी|करीइंग]] के लिए पैटर्न मिलान प्रदान करता है। यह प्रोग्रामिंग भाषा अनुसंधान में अत्यधिक उपयोग किया जाता है और यह प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थों का उपयोग करके पूर्ण रूप से निर्दिष्ट और सत्यापित होने वाली कुछ भाषाओं में से है। इसके प्रकार पैटर्न मिलान इसे उत्तम उपाय से अनुकूल बनाते हैं और सामान्यतः अन्य औपचारिक भाषाओं जैसे [[संकलक लेखन]], स्वचालित प्रमेय सिद्ध करने और [[औपचारिक सत्यापन]] में काम करने के लिए उपयोग किया जाता है।


== अवलोकन ==
== अवलोकन ==
Line 26: Line 26:
एमएल को अशुद्ध कार्यात्मक भाषा के रूप में संदर्भित किया जा सकता है, क्योंकि यह कार्यात्मक प्रोग्रामिंग को प्रोत्साहित करती है, और यह साइड-इफ़ेक्ट (कंप्यूटर विज्ञान) की अनुमति देती है<ref>{{cite book |last1=Sebesta |first1=Robert |title=Concepts of Programming Languages |date=1999 |publisher=Addison-Westley |isbn=0-201-38596-1 |page=54 |edition=4th}}</ref> (जैसे कि [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प प्रोग्रामिंग भाषा]] लेकिन [[हास्केल (प्रोग्रामिंग भाषा)]] जैसी [[विशुद्ध रूप से कार्यात्मक भाषा]] के विपरीत)। अधिकांश प्रोग्रामिंग भाषाओं की जैसे, एमएल [[उत्सुक मूल्यांकन]] का उपयोग करता है, जिसका अर्थ है कि सभी उप-अभिव्यक्तियों का सदैव मूल्यांकन किया जाता है, चूँकि क्लोजर (कंप्यूटर विज्ञान) के उपयोग के माध्यम से [[आलसी मूल्यांकन|मंद मूल्यांकन]] प्राप्त किया जा सकता है। इस प्रकार हास्केल के जैसे अनंत धाराएँ बना और उपयोग कर सकते हैं, लेकिन उनकी अभिव्यक्ति अप्रत्यक्ष होती है।
एमएल को अशुद्ध कार्यात्मक भाषा के रूप में संदर्भित किया जा सकता है, क्योंकि यह कार्यात्मक प्रोग्रामिंग को प्रोत्साहित करती है, और यह साइड-इफ़ेक्ट (कंप्यूटर विज्ञान) की अनुमति देती है<ref>{{cite book |last1=Sebesta |first1=Robert |title=Concepts of Programming Languages |date=1999 |publisher=Addison-Westley |isbn=0-201-38596-1 |page=54 |edition=4th}}</ref> (जैसे कि [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प प्रोग्रामिंग भाषा]] लेकिन [[हास्केल (प्रोग्रामिंग भाषा)]] जैसी [[विशुद्ध रूप से कार्यात्मक भाषा]] के विपरीत)। अधिकांश प्रोग्रामिंग भाषाओं की जैसे, एमएल [[उत्सुक मूल्यांकन]] का उपयोग करता है, जिसका अर्थ है कि सभी उप-अभिव्यक्तियों का सदैव मूल्यांकन किया जाता है, चूँकि क्लोजर (कंप्यूटर विज्ञान) के उपयोग के माध्यम से [[आलसी मूल्यांकन|मंद मूल्यांकन]] प्राप्त किया जा सकता है। इस प्रकार हास्केल के जैसे अनंत धाराएँ बना और उपयोग कर सकते हैं, लेकिन उनकी अभिव्यक्ति अप्रत्यक्ष होती है।


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


एमएल को [[एडिनबर्ग विश्वविद्यालय]] में 1970 के दशक के प्रारम्भ में [[रॉबिन मिलनर]] और अन्य द्वारा विकसित किया गया था <ref name="Gordon1996">{{cite web | last = Gordon | first = Michael J. C. | author-link = Michael J. C. Gordon | year=1996 | title = From LCF to HOL: a short history | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | access-date = 2007-10-11}}</ref> और इसका सिंटैक्स [[ISWIM|आईएसडब्लूआईएम]] से प्रेरित है। ऐतिहासिक रूप से, एमएल की कल्पना को[[संगणनीय कार्यों के लिए तर्क]] (जिसकी भाषा, प्लम्बडा, [[पहले क्रम का तर्क]] का संयोजन फ़र्स्ट-ऑर्डर प्रेडिकेट कैलकुलस और सिंपल-टाइप्ड पॉलीमॉर्फिज़्म (कंप्यूटर साइंस) [[लैम्ब्डा कैलकुलस]]) के लिए प्रूफ टैक्टिक्स विकसित करने के लिए की गई थी)।
एमएल को [[एडिनबर्ग विश्वविद्यालय]] में 1970 के दशक के प्रारम्भ में [[रॉबिन मिलनर]] और अन्य द्वारा विकसित किया गया था <ref name="Gordon1996">{{cite web | last = Gordon | first = Michael J. C. | author-link = Michael J. C. Gordon | year=1996 | title = From LCF to HOL: a short history | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | access-date = 2007-10-11}}</ref> और इसका सिंटैक्स [[ISWIM|आईएसडब्लूआईएम]] से प्रेरित है। ऐतिहासिक रूप से, एमएल की कल्पना को [[संगणनीय कार्यों के लिए तर्क]] (जिसकी भाषा, प्लम्बडा, [[पहले क्रम का तर्क]] का संयोजन फ़र्स्ट-ऑर्डर प्रेडिकेट कैलकुलस और सिंपल-टाइप्ड पॉलीमॉर्फिज़्म (कंप्यूटर साइंस) [[लैम्ब्डा कैलकुलस]]) के लिए प्रूफ टैक्टिक्स विकसित करने के लिए की गई थी)।


एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक एसएमएल, [[OCaml|ओसीएमएल]] और एफ शार्प (प्रोग्रामिंग भाषा) हैं। एमएल के विचारों ने कई अन्य भाषाओं, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), [[नेमर्ले]],<ref>{{Citation |title=Programming language for "special forces" of developers |publisher=Nemerle Project Team |publication-place=Russian Software Development Network |url=http://nemerle.org/About |access-date=January 24, 2021}}</ref> [[एटीएस (प्रोग्रामिंग भाषा)]], और [[एल्म (प्रोग्रामिंग भाषा)]] को प्रभावित किया है।<ref>{{cite book|last1=Tate|first1=Bruce A.|last2=Daoud|first2=Fred|last3=Dees|first3=Ian|last4=Moffitt|first4=Jack|title=Seven More Languages in Seven Weeks|date=2014|publisher=The Pragmatic Programmers, LLC|isbn=978-1-941222-15-7|pages=97, 101|edition=Book version: P1.0-November 2014|chapter=3. Elm|quote=On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]}}</ref>
एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक एसएमएल, [[OCaml|ओसीएमएल]] और एफ शार्प (प्रोग्रामिंग भाषा) हैं। एमएल के विचारों ने कई अन्य भाषाओं, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), [[नेमर्ले]],<ref>{{Citation |title=Programming language for "special forces" of developers |publisher=Nemerle Project Team |publication-place=Russian Software Development Network |url=http://nemerle.org/About |access-date=January 24, 2021}}</ref> [[एटीएस (प्रोग्रामिंग भाषा)]], और [[एल्म (प्रोग्रामिंग भाषा)]] को प्रभावित किया है।<ref>{{cite book|last1=Tate|first1=Bruce A.|last2=Daoud|first2=Fred|last3=Dees|first3=Ian|last4=Moffitt|first4=Jack|title=Seven More Languages in Seven Weeks|date=2014|publisher=The Pragmatic Programmers, LLC|isbn=978-1-941222-15-7|pages=97, 101|edition=Book version: P1.0-November 2014|chapter=3. Elm|quote=On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]}}</ref>
== उदाहरण ==
== उदाहरण ==
निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य एमएल भाषाएँ जैसे ओसीएमएल और F# छोटे-छोटे तरीकों से भिन्न हैं।
निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य एमएल भाषाएँ जैसे ओसीएमएल और F छोटे-छोटे विधि से भिन्न हैं।


=== [[कारख़ाने का|फ़ैक्टोरियल]] ===
=== [[कारख़ाने का|फ़ैक्टोरियल]] ===
शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:
शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
  fun fac (0 : int) : int = 1


fun fac (0 : int) : int = 1
  | fac (n : int) : int = n * fac (n - 1)
 
fun fac (0 : int) : int = 1
<nowiki>|</nowiki> fac (n : int) : int = n * fac (n - 1)


यह फैक्टोरियल को पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान होता है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान होते है।
यह फैक्टोरियल को पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान होता है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान होते है।
Line 52: Line 49:
फ़ंक्शन पैटर्न मिलान पर भी निर्भर करता है, जो एमएल प्रोग्रामिंग का महत्वपूर्ण भाग है। ध्यान दें कि किसी फ़ंक्शन के पैरामीटर आवश्यक रूप से कोष्ठक में नहीं हैं बल्कि रिक्त स्थान द्वारा अलग किए गए हैं। जब फ़ंक्शन का तर्क 0 (शून्य) होता है तो यह पूर्णांक 1 (एक) लौटाएगा। अन्य सभी विषयो के लिए दूसरी पंक्ति की कोशिश की जाती है। यह [[रिकर्सन (कंप्यूटर विज्ञान)]] है, और बेस केस तक पहुंचने तक फ़ंक्शन को फिर से निष्पादित करता है।
फ़ंक्शन पैटर्न मिलान पर भी निर्भर करता है, जो एमएल प्रोग्रामिंग का महत्वपूर्ण भाग है। ध्यान दें कि किसी फ़ंक्शन के पैरामीटर आवश्यक रूप से कोष्ठक में नहीं हैं बल्कि रिक्त स्थान द्वारा अलग किए गए हैं। जब फ़ंक्शन का तर्क 0 (शून्य) होता है तो यह पूर्णांक 1 (एक) लौटाएगा। अन्य सभी विषयो के लिए दूसरी पंक्ति की कोशिश की जाती है। यह [[रिकर्सन (कंप्यूटर विज्ञान)]] है, और बेस केस तक पहुंचने तक फ़ंक्शन को फिर से निष्पादित करता है।


फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि नकारात्मक तर्क पुनरावर्ती कॉल की [[अनंत अवरोही श्रृंखला]] का कारण बनता है। अधिक मजबूत कार्यान्वयन पुनरावर्ती से पहले गैर-नकारात्मक तर्क की जांच करेगा, जो इस प्रकार है:
फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि नकारात्मक तर्क पुनरावर्ती कॉल की [[अनंत अवरोही श्रृंखला]] का कारण बनता है। अधिक स्थिर कार्यान्वयन पुनरावर्ती से पहले गैर-नकारात्मक तर्क का अन्वेषण करेगा, जो इस प्रकार है:
   fun fact n = let
   fun fact n = let


Line 71: Line 68:
   end
   end
=== उत्क्रम सूची ===
=== उत्क्रम सूची ===
निम्न फ़ंक्शन किसी सूची में तत्वों को पलट देता है। अधिक सटीक रूप से, यह नई सूची देता है जिसके तत्व दी गई सूची की तुलना में उल्टे क्रम में होते हैं।
निम्न फ़ंक्शन किसी सूची में तत्वों को परिवर्तित कर देता है। अधिक त्रुटिहीन रूप से, यह नई सूची देता है जिसके तत्व दी गई सूची की तुलना में विपरीत क्रम में होते हैं।
   fun 'a reverse xs : 'a list = List.foldl (op ::) [] xs
   fun 'a reverse xs : 'a list = List.foldl (op ::) [] xs
रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए [[द्विघात समय]] की आवश्यकता होती है। फ़ंक्शन को [[रैखिक समय]] में निष्पादित करने के लिए फिर से लिखा जा सकता है:
रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए [[द्विघात समय]] की आवश्यकता होती है। फ़ंक्शन को [[रैखिक समय]] में निष्पादित करने के लिए फिर से लिखा जा सकता है:
यह फ़ंक्शन पैरामीट्रिक बहुरूपता का उदाहरण है। यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।
यह फ़ंक्शन पैरामीट्रिक बहुरूपता का उदाहरण है। यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।


=== मॉड्यूल ===
=== मॉड्यूल ===
बड़ी परियोजनाओं और पुस्तकालयों की संरचना के लिए मॉड्यूल एमएल की प्रणाली है। मॉड्यूल में हस्ताक्षर फ़ाइल और एक या अधिक संरचना फ़ाइलें होती हैं। हस्ताक्षर फ़ाइल [[एपीआई]] को लागू करने के लिए निर्दिष्ट करती है (जैसे C हेडर फ़ाइल, या [[इंटरफ़ेस (जावा)]] फ़ाइल) और संरचना हस्ताक्षर लागू करती है (जैसे सी स्रोत फ़ाइल या जावा क्लास फ़ाइल)। उदाहरण के लिए, निम्नलिखित अंकगणितीय हस्ताक्षर को परिभाषित करता है और परिमेय संख्याओं का उपयोग करके इसका कार्यान्वयन करता है:
बड़ी परियोजनाओं और पुस्तकालयों की संरचना के लिए मॉड्यूल एमएल की प्रणाली है। मॉड्यूल में हस्ताक्षर फ़ाइल और अधिक संरचना फ़ाइलें होती हैं। हस्ताक्षर फ़ाइल [[एपीआई]] को प्रारम्भ करने के लिए निर्दिष्ट करती है (जैसे C हेडर फ़ाइल, या [[इंटरफ़ेस (जावा)]] फ़ाइल) और संरचना हस्ताक्षर प्रारम्भ करती है (जैसे सी स्रोत फ़ाइल या जावा क्लास फ़ाइल)। उदाहरण के लिए, निम्नलिखित अंकगणितीय हस्ताक्षर को परिभाषित करता है और परिमेय संख्याओं का उपयोग करके इसका कार्यान्वयन करता है:
       signature ARITH =
       signature ARITH =


Line 97: Line 95:
इन्हें 'युएसई' कमांड द्वारा दुभाषिया में आयात किया जाता है। कार्यान्वयन के साथ सहभागिता केवल हस्ताक्षर कार्यों के माध्यम से अनुमति दी जाती है, उदाहरण के लिए इस कोड के माध्यम से सीधे 'रैट' डेटा ऑब्जेक्ट बनाना संभव नहीं होता है। 'संरचना' ब्लॉक कार्यान्वयन के सभी विवरणों को बाहर से छुपाता है।
इन्हें 'युएसई' कमांड द्वारा दुभाषिया में आयात किया जाता है। कार्यान्वयन के साथ सहभागिता केवल हस्ताक्षर कार्यों के माध्यम से अनुमति दी जाती है, उदाहरण के लिए इस कोड के माध्यम से सीधे 'रैट' डेटा ऑब्जेक्ट बनाना संभव नहीं होता है। 'संरचना' ब्लॉक कार्यान्वयन के सभी विवरणों को बाहर से छुपाता है।


एमएल के मानक पुस्तकालयों को इस प्रकार से मॉड्यूल के रूप में लागू किया जाता है।
एमएल के मानक पुस्तकालयों को इस प्रकार से मॉड्यूल के रूप में प्रारम्भ किया जाता है।


== यह भी देखें ==
== यह भी देखें ==
Line 105: Line 103:
* [[आलसी एमएल|मंद एमएल]]: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
* [[आलसी एमएल|मंद एमएल]]: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
* [[पाल (प्रोग्रामिंग भाषा)]]: एमएल से संबंधित एक शैक्षिक भाषा
* [[पाल (प्रोग्रामिंग भाषा)]]: एमएल से संबंधित एक शैक्षिक भाषा
* ओसीएमएल: [[Coq|सीओक्यू]] को लागू करने के लिए उपयोग की जाने वाली एक एमएल बोली
* ओसीएमएल: [[Coq|सीओक्यू]] को प्रारम्भ करने के लिए उपयोग की जाने वाली एक एमएल बोली
* एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ:नेफ्ट फ्रेमवर्क के लिए ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
* एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ:नेफ्ट फ्रेमवर्क के लिए ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
* [[एकमा स्क्रिप्ट]] और [[टाइपप्रति]]: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं
* [[एकमा स्क्रिप्ट]] और [[टाइपप्रति]]: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं

Revision as of 23:04, 4 March 2023

एमएल
Paradigmमल्टी-पैराडाइम: फंक्शनल, जेनेरिक, अनिवार्य
द्वारा डिज़ाइन किया गयारॉबिन मिलनर और एडिनबर्ग विश्वविद्यालय में अन्य
टाइपिंग अनुशासनअनुमानित, स्थिर, मजबूत
Dialects
ओकैमल, मानक एमएल, एफ
Influenced by
ईस्वीं
Influenced
Clojure, Coq, Cyclone, C++, Elm, F#, F*, Haskell, Idris, Kotlin, Miranda, Nemerle, OCaml, Opa, Erlang, Rust, Scala, Standard ML

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

अवलोकन

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

एमएल की दृढ़ता अधिकतर भाषा डिजाइन और परिवर्तन (संकलक, विश्लेषक, प्रमेय सिद्ध) में प्रारम्भ होती है, लेकिन यह सामान्य उद्देश्य वाली भाषा है जिसका उपयोग जैव सूचना विज्ञान और वित्तीय प्रणालियों में भी किया जाता है।

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

एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक एसएमएल, ओसीएमएल और एफ शार्प (प्रोग्रामिंग भाषा) हैं। एमएल के विचारों ने कई अन्य भाषाओं, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), नेमर्ले,[5] एटीएस (प्रोग्रामिंग भाषा), और एल्म (प्रोग्रामिंग भाषा) को प्रभावित किया है।[6]

उदाहरण

निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य एमएल भाषाएँ जैसे ओसीएमएल और F छोटे-छोटे विधि से भिन्न हैं।

फ़ैक्टोरियल

शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:

 fun fac (0 : int) : int = 1
  | fac (n : int) : int = n * fac (n - 1)

यह फैक्टोरियल को पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान होता है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान होते है।

दिखाई गई परिभाषा का भाग वैकल्पिक है, और इस फ़ंक्शन के प्रकारों का वर्णन करता है। संकेतन E: t को व्यंजक E के प्रकार t के रूप में पढ़ा जा सकता है। उदाहरण के लिए, तर्क n को टाइप पूर्णांक (int) असाइन किया गया है, और fac (n: int), पूर्णांक n पर fac लगाने का परिणाम भी प्रकार पूर्णांक है। पूर्ण के रूप में फ़ंक्शन फ़ैक में पूर्णांक से पूर्णांक (int -> int) तक टाइप फ़ंक्शन होता है, अर्थात, पूर्णांक को तर्क के रूप में स्वीकार करता है और पूर्णांक परिणाम देता है। टाइप के अनुमान के लिए धन्यवाद, टाइप के एनोटेशन को छोड़ा जा सकता है और संकलक द्वारा प्राप्त किया जाएगा। टाइप एनोटेशन के बिना पुनर्लेखित, उदाहरण इस प्रकार दिखता है:

 fun fac 0 = 1
  | fac n = n * fac (n - 1)

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

फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि नकारात्मक तर्क पुनरावर्ती कॉल की अनंत अवरोही श्रृंखला का कारण बनता है। अधिक स्थिर कार्यान्वयन पुनरावर्ती से पहले गैर-नकारात्मक तर्क का अन्वेषण करेगा, जो इस प्रकार है:

 fun fact n = let
  fun fac 0 = 1
    | fac n = n * fac (n - 1)
  in
    if (n < 0) then raise Domain else fac n
  end

समस्याग्रस्त विषय (जब n ऋणात्मक होता है) एमएल की अपवाद प्रणाली के उपयोग को प्रदर्शित करता है।

इसके आंतरिक लूप को टेल कॉल के रूप में लिखकर फ़ंक्शन को और अच्छा बनाया जा सकता है, जैसे कि कॉल स्टैक को फ़ंक्शन कॉल की संख्या के अनुपात में बढ़ने की आवश्यकता नहीं है। यह आंतरिक फ़ंक्शन में अतिरिक्त, संचायक, पैरामीटर जोड़कर प्राप्त किया जाता है। अंत में, हम पहुंचे

 fun fact n = let
  fun fac 0 acc = acc
    | fac n acc = fac (n - 1) (n * acc)
  in
    if (n < 0) then raise Domain else fac n 1
  end

उत्क्रम सूची

निम्न फ़ंक्शन किसी सूची में तत्वों को परिवर्तित कर देता है। अधिक त्रुटिहीन रूप से, यह नई सूची देता है जिसके तत्व दी गई सूची की तुलना में विपरीत क्रम में होते हैं।

 fun 'a reverse xs : 'a list = List.foldl (op ::) [] xs

रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए द्विघात समय की आवश्यकता होती है। फ़ंक्शन को रैखिक समय में निष्पादित करने के लिए फिर से लिखा जा सकता है:

यह फ़ंक्शन पैरामीट्रिक बहुरूपता का उदाहरण है। यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।

मॉड्यूल

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

      signature ARITH =
sig
        type t
        val zero : t
        val succ : t -> t
        val sum : t * t -> t
end
       structure Rational : ARITH =
struct
        datatype t = Rat of int * int
        val zero = Rat (0, 1)
        fun succ (Rat (a, b)) = Rat (a + b, b)
        fun sum (Rat (a, b), Rat (c, d)) = Rat (a * d + c * b , b * d)
end

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

एमएल के मानक पुस्तकालयों को इस प्रकार से मॉड्यूल के रूप में प्रारम्भ किया जाता है।

यह भी देखें

  • मानक एमएल और मानक एमएल § कार्यान्वयन
  • आश्रित एमएल: एमएल का निर्भर रूप से टाइप किया गया विस्तार
    • एटीएस (प्रोग्रामिंग भाषा): निर्भर एमएल का एक और विकास
  • मंद एमएल: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
  • पाल (प्रोग्रामिंग भाषा): एमएल से संबंधित एक शैक्षिक भाषा
  • ओसीएमएल: सीओक्यू को प्रारम्भ करने के लिए उपयोग की जाने वाली एक एमएल बोली
  • एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ:नेफ्ट फ्रेमवर्क के लिए ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
  • एकमा स्क्रिप्ट और टाइपप्रति: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं

संदर्भ

  1. Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.
  2. Milner, Robin; Tofte, Mads (1991). "4.1 Contexts, environments and scope". Commentary on Standard ML. The MIT Press. pp. 35–36. ISBN 0-262-63137-7.
  3. Sebesta, Robert (1999). Concepts of Programming Languages (4th ed.). Addison-Westley. p. 54. ISBN 0-201-38596-1.
  4. Gordon, Michael J. C. (1996). "From LCF to HOL: a short history". Retrieved 2007-10-11.
  5. Programming language for "special forces" of developers, Russian Software Development Network: Nemerle Project Team, retrieved January 24, 2021
  6. Tate, Bruce A.; Daoud, Fred; Dees, Ian; Moffitt, Jack (2014). "3. Elm". Seven More Languages in Seven Weeks (Book version: P1.0-November 2014 ed.). The Pragmatic Programmers, LLC. pp. 97, 101. ISBN 978-1-941222-15-7. On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]


अग्रिम पठन


बाहरी संबंध