क्लीन (प्रोग्रामिंग लैंग्वेज): Difference between revisions

From Vigyanwiki
Line 17: Line 17:
}}
}}


क्लीन सामान्य-उद्देश्यीय पूर्णतया [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग|कार्यात्मक]] कंप्यूटर [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है | इसे समवर्ती क्लीन सिस्टम (स्वच्छ प्रणाली) कहा गया,<ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/old/Clean07/Sun4/README |title=Clean 0.7: Readme |archive-url=https://web.archive.org/web/20190524121044/https://ftp.cs.ru.nl/Clean/old/Clean07/Sun4/README |archive-date=2019-05-24}}</ref> फिर क्लीन सिस्टम,<ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/old/Clean10/README |title=Clean 1.0: Readme |archive-url=https://web.archive.org/web/20190505113256/https://ftp.cs.ru.nl/Clean/old/Clean10/README |archive-date=2019-05-05}}</ref><ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/Clean13/README |title=Clean 1.3: Readme |archive-url=https://web.archive.org/web/20190427194714/https://ftp.cs.ru.nl/Clean/Clean13/README |archive-date=2019-04-27}}</ref> बाद में केवल क्लीन कहा गया। क्लीन को 1987 से निजमेजेन में रेडबौड विश्वविद्यालय के शोधकर्ताओं के समूह द्वारा विकसित किया गया है।<ref>{{cite web |url=https://www.mbsd.cs.ru.nl/Software |title=Radboud University Nijmegen: Department of Software Science: Software}}</ref>
'''क्लीन''' सामान्य-उद्देश्यीय पूर्णतया [[विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग|कार्यात्मक]] कंप्यूटर [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है | इसे '''समवर्ती क्लीन सिस्टम''' (स्वच्छ प्रणाली) कहा गया,<ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/old/Clean07/Sun4/README |title=Clean 0.7: Readme |archive-url=https://web.archive.org/web/20190524121044/https://ftp.cs.ru.nl/Clean/old/Clean07/Sun4/README |archive-date=2019-05-24}}</ref> फिर '''क्लीन सिस्टम''',<ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/old/Clean10/README |title=Clean 1.0: Readme |archive-url=https://web.archive.org/web/20190505113256/https://ftp.cs.ru.nl/Clean/old/Clean10/README |archive-date=2019-05-05}}</ref><ref>{{cite web |url=https://ftp.cs.ru.nl/Clean/Clean13/README |title=Clean 1.3: Readme |archive-url=https://web.archive.org/web/20190427194714/https://ftp.cs.ru.nl/Clean/Clean13/README |archive-date=2019-04-27}}</ref> बाद में केवल '''क्लीन''' कहा गया। क्लीन को 1987 से निजमेजेन में रेडबौड विश्वविद्यालय के शोधकर्ताओं के समूह द्वारा विकसित किया गया है।<ref>{{cite web |url=https://www.mbsd.cs.ru.nl/Software |title=Radboud University Nijmegen: Department of Software Science: Software}}</ref>
==सुविधाएँ==
==सुविधाएँ==
क्लीन लैंग्वेज पहली बार 1987 में सामने आई।<ref>{{cite web |url=http://wiki.clean.cs.ru.nl/सामान्य प्रश्न|access-date=2021-11-26 |title=सामान्य प्रश्न|website=Clean}}</ref> हालाँकि लैंग्वेज का विकास धीमा हो गया है, कुछ शोधकर्ता अभी भी लैंग्वेज पर काम कर रहे हैं।<ref>{{cite web |url=https://clean.cs.ru.nl/प्रकाशनों|access-date=2021-11-26 |title=प्रकाशनों|website=Clean}}</ref> 2018 में, स्पिन-ऑफ कंपनी की स्थापना की गई जो क्लीन का उपयोग करती है।<ref>{{cite web |url=https://www.top-software.nl/ |title=घर|website=TOP Software Technology |access-date=26 November 2021}}</ref>
क्लीन लैंग्वेज पहली बार 1987 में सामने आई।<ref>{{cite web |url=http://wiki.clean.cs.ru.nl/सामान्य प्रश्न|access-date=2021-11-26 |title=सामान्य प्रश्न|website=Clean}}</ref> हालाँकि लैंग्वेज का विकास धीमा हो गया है, कुछ शोधकर्ता अभी भी लैंग्वेज पर काम कर रहे हैं।<ref>{{cite web |url=https://clean.cs.ru.nl/प्रकाशनों|access-date=2021-11-26 |title=प्रकाशनों|website=Clean}}</ref> 2018 में, स्पिन-ऑफ कंपनी की स्थापना की गई जो क्लीन का उपयोग करती है।<ref>{{cite web |url=https://www.top-software.nl/ |title=घर|website=TOP Software Technology |access-date=26 November 2021}}</ref>
Line 89: Line 89:


=== एबीसी मशीन ===
=== एबीसी मशीन ===
ऊपर उल्लिखित एबीसी कोड [[अमूर्त मशीन]] के लिए [[मध्यवर्ती प्रतिनिधित्व]] है। क्योंकि एबीसी कोड के लिए मशीन कोड जनरेशन अपेक्षाकृत सरल है, इससे नए संरचना का समर्थन करना आसान हो जाता है। एबीसी मशीन [[अनिवार्य प्रोग्रामिंग|आदेशसूचक प्रोग्रामिंग]] अमूर्त ग्राफ पुनर्लेखन मशीन है।<ref>{{cite thesis|type=PhD|last1=Koopman|first1=Pieter|title=निष्पादन योग्य विशिष्टताओं के रूप में कार्यात्मक कार्यक्रम|date=December 10, 1990|publisher=Katholieke Universiteit Nijmegen|isbn=90-9003689-X|page=35}}</ref> इसमें दोबारा लिखे जा रहे क्लीन ग्राफ़ को रखने के लिए ग्राफ़ स्टोर और तीन स्टैक शामिल हैं। A(rgument)-स्टैक में ऐसे तर्क होते हैं जो ग्राफ़ स्टोर में नोड्स को संदर्भित करते हैं। B(asic मान)-स्टैक में बुनियादी मान (पूर्णांक, वर्ण, वास्तविक, आदि) होते हैं। हालाँकि यह बिल्कुल आवश्यक नहीं है (ये सभी तत्व ग्राफ़ स्टोर में भी नोड हो सकते हैं), एक अलग स्टैक का उपयोग करना अधिक कुशल है। सी(ऑनट्रोल)-स्टैक प्रवाह नियंत्रण के लिए निर्वाचित एड्रेस रखता है। [[रनटाइम सिस्टम|कार्यावधि सिस्टम]], जो प्रत्येक निष्पादन योग्य से जुड़ा हुआ है, एक<code>Start</code> बनाता है ग्राफ़ स्टोर में नोड और इसे ए-स्टैक पर  जोर देता है। फिर यह आवश्यकतानुसार इसका मूल्यांकन करते हुए इसे प्रिंट करना प्रारंभ कर देता है।
ऊपर उल्लिखित एबीसी कोड [[अमूर्त मशीन]] के लिए [[मध्यवर्ती प्रतिनिधित्व]] है। क्योंकि एबीसी कोड के लिए मशीन कोड जनरेशन अपेक्षाकृत सरल है, इससे नए संरचना का समर्थन करना आसान हो जाता है। एबीसी मशीन [[अनिवार्य प्रोग्रामिंग|आदेशसूचक प्रोग्रामिंग]] अमूर्त ग्राफ पुनर्लेखन मशीन है।<ref>{{cite thesis|type=PhD|last1=Koopman|first1=Pieter|title=निष्पादन योग्य विशिष्टताओं के रूप में कार्यात्मक कार्यक्रम|date=December 10, 1990|publisher=Katholieke Universiteit Nijmegen|isbn=90-9003689-X|page=35}}</ref> इसमें दोबारा लिखे जा रहे क्लीन ग्राफ़ को रखने के लिए ग्राफ़ स्टोर और तीन स्टैक शामिल हैं। A(rgument)-स्टैक में ऐसे तर्क होते हैं जो ग्राफ़ स्टोर में नोड्स को संदर्भित करते हैं। B(asic मान)-स्टैक में बुनियादी मान (पूर्णांक, वर्ण, वास्तविक, आदि) होते हैं। हालाँकि यह बिल्कुल आवश्यक नहीं है (ये सभी तत्व ग्राफ़ स्टोर में भी नोड हो सकते हैं), एक अलग स्टैक का उपयोग करना अधिक कुशल है। C(ontrol)-स्टैक प्रवाह नियंत्रण के लिए निर्वाचित एड्रेस रखता है। [[रनटाइम सिस्टम|कार्यावधि सिस्टम]], जो प्रत्येक निष्पादन योग्य से जुड़ा हुआ है, एक<code>Start</code> बनाता है ग्राफ़ स्टोर में नोड और इसे ए-स्टैक पर  जोर देता है। फिर यह आवश्यकतानुसार इसका मूल्यांकन करते हुए इसे प्रिंट करना प्रारंभ कर देता है।


=== ब्राउज़र में क्लीन चलाना ===
=== ब्राउज़र में क्लीन चलाना ===
Line 120: Line 120:
! [[x86-64]]
! [[x86-64]]
|-
|-
| 3.1 || {{Date table sorting|January 5, 2022}}
| 3.1 ||5 जनवरी 2022
| {{Yes}} || {{Yes}} || {{Yes}}
| {{Yes}} || {{Yes}} || {{Yes}}
| {{No}} || {{No}} || {{Yes}}
| {{No}} || {{No}} || {{Yes}}
Line 127: Line 127:
|
|
|-
|-
| 3.0 || {{Date table sorting|October 2, 2018}}
| 3.0 ||2 अक्टूबर 2018
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{No}} || {{No}} || {{Yes}}
| {{No}} || {{No}} || {{Yes}}
Line 134: Line 134:
|
|
|-
|-
| 2.4 || {{Date table sorting|December 23, 2011}}
| 2.4 ||23 दिसंबर 2011
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{No}} || {{No}} || {{Yes}}
| {{No}} || {{No}} || {{Yes}}
Line 141: Line 141:
|
|
|-
|-
| 2.3 || {{Date table sorting|December 22, 2010}}
| 2.3 ||22 दिसंबर 2010
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
Line 148: Line 148:
|
|
|-
|-
| 2.2 || {{Date table sorting|December 19, 2006}}
| 2.2 ||19 दिसंबर 2006
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 155: Line 155:
|
|
|-
|-
| 2.1.1 || {{Date table sorting|May 31, 2005}}
| 2.1.1 ||31 मई 2005
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 162: Line 162:
|
|
|-
|-
| 2.1.0 || {{Date table sorting|October 31, 2003}}
| 2.1.0 ||31 अक्टूबर 2003
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 169: Line 169:
|
|
|-
|-
| 2.0.2 || {{Date table sorting|December 12, 2002}}
| 2.0.2 ||12 दिसंबर 2002
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 176: Line 176:
|
|
|-
|-
| 2.0.1 || {{Date table sorting|July 4, 2002}}
| 2.0.1 ||4 जुलाई 2002
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 183: Line 183:
|
|
|-
|-
| 2.0 || {{Date table sorting|December 21, 2001}}
| 2.0 ||21 दिसंबर 2001
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
Line 190: Line 190:
|
|
|-
|-
| 1.3.3 || {{Date table sorting|September 13, 2000}}
| 1.3.3 ||13 सितंबर 2000
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 197: Line 197:
|
|
|-
|-
| 1.3.2 || {{Date table sorting|July 1, 1999}}
| 1.3.2 ||1 जुलाई 1999
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
Line 204: Line 204:
|
|
|-
|-
| 1.3.1 || {{Date table sorting|January 1999}}
| 1.3.1 ||जनवरी 1999
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 211: Line 211:
|
|
|-
|-
| 1.3 || {{Date table sorting|May 22, 1998}}
| 1.3 ||22 मई 1998
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
| {{No}} || {{Yes}} || {{No}}
Line 218: Line 218:
|
|
|-
|-
| 1.2.4 || {{Date table sorting|June 1997}}
| 1.2.4 ||जून 1997
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
Line 225: Line 225:
|
|
|-
|-
| 1.2.3 || {{Date table sorting|May 1997}}
| 1.2.3 ||मई 1997
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
Line 232: Line 232:
|
|
|-
|-
| 1.2 || {{Date table sorting|January 13, 1997}}
| 1.2 ||13 जनवरी 1997
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
| {{Yes}} || {{Yes}} || {{No}}
Line 239: Line 239:
|
|
|-
|-
| 1.1.3 || {{Date table sorting|October 1996}}
| 1.1.3 ||अक्टूबर 1996
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}}
| {{Yes}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[OS/2]] ([[i80386]])
| [[OS/2|ओएस/2 (i80386)]]
|-
|-
| 1.1.2 || {{Date table sorting|September 1996}}
| 1.1.2 ||सितंबर 1996
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}}
| {{Yes}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[SunOS]] 4 ([[SPARC]])
| [[SunOS|सनओएस 4 (स्पार्क)]]
|-
|-
| 1.1 || {{Date table sorting|March 1996}}
| 1.1 ||मार्च 1996
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
Line 260: Line 260:
|
|
|-
|-
| 1.0.2 || {{Date table sorting|September 1995}}
| 1.0.2 ||सितंबर 1995
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}}
| {{Yes}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[OS/2]] ([[i80386]]); [[SunOS]] 4 ([[SPARC]])
| [[OS/2|ओएस/2 (i80386)]]; सनओएस 4 (स्पार्क)
|-
|-
| 1.0 || {{Date table sorting|May 1995}}
| 1.0 ||मई 1995
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}}
| {{No}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[OS/2]] ([[i80386]])
| [[OS/2|ओएस/2 (i80386)]]
|-
|-
| 0.8.4 || {{Date table sorting|May 11, 1993}}
| 0.8.4 ||11 मई 1993
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}}
| {{No}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| Experimental [[Transputer#T8:_floating_point|T800 transputer]] release
| प्रायोगिक [[Transputer#T8:_floating_point|T800 ट्रांसप्यूटर]] रिलीज़
|-
|-
| 0.8.3 || {{Date table sorting|February 26, 1993}}
| 0.8.3 ||26 फ़रवरी 1993
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
Line 288: Line 288:
|
|
|-
|-
| 0.8.1 || {{Date table sorting|October 19, 1992}}
| 0.8.1 ||19 अक्टूबर 1992
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
Line 295: Line 295:
|
|
|-
|-
| 0.8 || {{Date table sorting|July 13, 1992}}
| 0.8 ||13 जुलाई 1992
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}}
| {{No}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[OS/2]] ([[i80386]]); [[SunOS]] 3–4 ([[SPARC]])
| [[OS/2|ओएस/2 (i80386)]]; [[SunOS|सनओएस 3-4 (स्पार्क)]]
|-
|-
| 0.7 || {{Date table sorting|May 1991}}
| 0.7 ||मई 1991
| {{No}} || {{No}} || {{No}}
| {{No}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{Yes}} || {{No}} || {{No}}
| {{No}}
| {{No}}
| {{No}} || {{No}}
| {{No}} || {{No}}
| [[SunOS]] 3–4 ([[SPARC]])
| [[SunOS|सनओएस 3-4 (स्पार्क)]]
|}
|}




==हास्केल से तुलना==
2008 के [[बेंचमार्क (कंप्यूटिंग)]] से पता चला कि क्लीन नेटिव कोड बेंचमार्क के आधार पर हास्केल ([[ग्लासगो हास्केल कंपाइलर]] (जीएचसी)) के समान प्रदर्शन करता है।<ref>{{cite journal |last1=Jansen |first1=Jan Martin |last2=Koopman |first2=Pieter |last3=Plasmeijer |first3=Rinus |date=2008 |title=व्याख्या से संकलन तक|url=ftp://ftp.cs.ru.nl/pub/Clean/papers/2008/janj08-CEFP07-InterpretationToCompilation.pdf |access-date=2016-05-21}}</ref>


'''<big>हास्केल से तुलना</big>'''


2008 के [[बेंचमार्क (कंप्यूटिंग)]] से पता चला कि क्लीन नेटिव कोड बेंचमार्क के आधार पर हास्केल ([[ग्लासगो हास्केल कंपाइलर]] (जीएचसी)) के समान प्रदर्शन करता है।<ref>{{cite journal |last1=Jansen |first1=Jan Martin |last2=Koopman |first2=Pieter |last3=Plasmeijer |first3=Rinus |date=2008 |title=व्याख्या से संकलन तक|url=ftp://ftp.cs.ru.nl/pub/Clean/papers/2008/janj08-CEFP07-InterpretationToCompilation.pdf |access-date=2016-05-21}}</ref>
===वाक्यगत अंतर===
===वाक्यगत अंतर===
क्लीन का सिंटैक्स कुछ उल्लेखनीय अंतरों के साथ, हास्केल के समान है:<ref name="CleanHaskellGuide" />
क्लीन का सिंटैक्स कुछ उल्लेखनीय अंतरों के साथ, हास्केल के समान है:<ref name="CleanHaskellGuide" />
Line 320: Line 320:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Haskell
! हास्केल
! Clean
!क्लीन
! Remarks
!टिप्पणियां
|-
|-
| <syntaxhighlight lang="haskell">[ x | x <- [1..10] , isOdd x]</syntaxhighlight>
| <syntaxhighlight lang="haskell">[ x | x <- [1..10] , isOdd x]</syntaxhighlight>
| <syntaxhighlight lang="clean">[ x \\ x <- [1..10] | isOdd x]</syntaxhighlight>
| <syntaxhighlight lang="clean">[ x \\ x <- [1..10] | isOdd x]</syntaxhighlight>
| [[list comprehension]]
| [[list comprehension|सूची समझ]]
|-
|-
| <syntaxhighlight lang="haskell">x:xs</syntaxhighlight>
| <syntaxhighlight lang="haskell">x:xs</syntaxhighlight>
| <syntaxhighlight lang="clean">[x:xs]</syntaxhighlight>
| <syntaxhighlight lang="clean">[x:xs]</syntaxhighlight>
| [[cons]] operator
| [[cons|विपक्ष]] ऑपरेटर
|-
|-
| <syntaxhighlight lang="haskell">
| <syntaxhighlight lang="haskell">
Line 342: Line 342:
   | Node (Tree a) a (Tree a)
   | Node (Tree a) a (Tree a)
</syntaxhighlight>
</syntaxhighlight>
| [[algebraic data type]]
| [[algebraic data type|बीजगणितीय डेटा प्रकार]]
|-
|-
| <syntaxhighlight lang="haskell">(Eq a, Eq b) => ...</syntaxhighlight>
| <syntaxhighlight lang="haskell">(Eq a, Eq b) => ...</syntaxhighlight>
| <syntaxhighlight lang="clean">... | Eq a & Eq b</syntaxhighlight>
| <syntaxhighlight lang="clean">... | Eq a & Eq b</syntaxhighlight>
| class assertions and contexts
|वर्ग के दावे और संदर्भ
|-
|-
| <syntaxhighlight lang="haskell">fun t@(Node l x r) = ...</syntaxhighlight>
| <syntaxhighlight lang="haskell">fun t@(Node l x r) = ...</syntaxhighlight>
| <syntaxhighlight lang="clean">fun t=:(Node l x r) = ...</syntaxhighlight>
| <syntaxhighlight lang="clean">fun t=:(Node l x r) = ...</syntaxhighlight>
| as-patterns
|जैसे-पैटर्न


|-
|-
| <syntaxhighlight lang="haskell">if x > 10 then 10 else x</syntaxhighlight>
| <syntaxhighlight lang="haskell">if x > 10 then 10 else x</syntaxhighlight>
| <syntaxhighlight lang="clean">if (x > 10) 10 x</syntaxhighlight>
| <syntaxhighlight lang="clean">if (x > 10) 10 x</syntaxhighlight>
| if
|अगर
|}
|}
सामान्य तौर पर, हास्केल ने क्लीन की तुलना में अधिक [[वाक्यात्मक शर्करा]] पेश की है।
सामान्य तौर पर, हास्केल ने क्लीन की तुलना में अधिक [[वाक्यात्मक शर्करा]] पेश की है।

Revision as of 11:16, 4 August 2023

Clean
File:Clean 3.0 (programming language) logo.svg
Paradigmfunctional
द्वारा डिज़ाइन किया गयाSoftware Technology Research Group of Radboud University Nijmegen
पहली प्रस्तुति1987; 37 years ago (1987)
Stable release
3.1 / 5 January 2022; 2 years ago (2022-01-05)
टाइपिंग अनुशासनstrong, static, dynamic
ओएसCross-platform
लाइसेंसSimplified BSD[1]
फ़ाइल नाम एक्सटेंशनएस.icl, .dcl, .abc
वेबसाइटclean.cs.ru.nl
Influenced by
Lean, Miranda, Haskell
Influenced
Haskell, Idris[2]

क्लीन सामान्य-उद्देश्यीय पूर्णतया कार्यात्मक कंप्यूटर प्रोग्रामिंग लैंग्वेज है | इसे समवर्ती क्लीन सिस्टम (स्वच्छ प्रणाली) कहा गया,[3] फिर क्लीन सिस्टम,[4][5] बाद में केवल क्लीन कहा गया। क्लीन को 1987 से निजमेजेन में रेडबौड विश्वविद्यालय के शोधकर्ताओं के समूह द्वारा विकसित किया गया है।[6]

सुविधाएँ

क्लीन लैंग्वेज पहली बार 1987 में सामने आई।[7] हालाँकि लैंग्वेज का विकास धीमा हो गया है, कुछ शोधकर्ता अभी भी लैंग्वेज पर काम कर रहे हैं।[8] 2018 में, स्पिन-ऑफ कंपनी की स्थापना की गई जो क्लीन का उपयोग करती है।[9]

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

माइक्रोसॉफ़्ट विंडोज़ के लिए एकीकृत विकास वातावरण (आईडीई) क्लीन वितरण में शामिल है।

उदाहरण

हेलो वर्ल्ड प्रोग्राम:

 Start = "Hello, world!"

तथ्यात्मक:

fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n-1)

Start = fac 10
fac :: Int -> Int
fac n = prod [1..n] // The product of the numbers 1 to n

Start = fac 10

फिबोनाची अनुक्रम:

fib :: Int -> Int
fib 0 = 1
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1) 

Start = fib 7
fibs :: Int Int -> [Int]
fibs x_2 x_1 = [x_2:fibs x_1 (x_2 + x_1)]

fib :: Int -> Int
fib n = (fibs 1 1) !! n

Start = fib 7

इन्फिक्स संकेतन ऑपरेटर:

(^) infixr 8 :: Int Int -> Int
(^) x 0 = 1
(^) x n = x * x ^ (n-1)

टाइप की घोषणा बताती है कि फ़ंक्शन प्राथमिकता 8 के साथ राइट एसोसिएटिव इन्फ़िक्स ऑपरेटर है: यह बताता है कि x*x^(n-1), x*(x^(n-1)) के विपरीत (x*x)^(n-1)के बराबर है। यह ऑपरेटर क्लीन मानक लाइब्रेरी StdEnv में पूर्व-परिभाषित है।

क्लीन कैसे काम करता है

कंप्यूटिंग ग्राफ पुनर्लेखन और ग्राफ कटौती पर आधारित है। संख्याएँ जैसे स्थिरांक ग्राफ़ हैं और फ़ंक्शंस ग्राफ़ पुनर्लेखन सूत्र हैं। यह, मूल कोड के कम्पीलिंग के साथ मिलकर, क्लीन प्रोग्राम बनाता है जो कंप्यूटर लैंग्वेज बेंचमार्क गेम के अनुसार उच्च अमूर्तता का उपयोग अपेक्षाकृत तेजी से चलाते हैं।[11]

कम्पीलिंग (अनुभाषक)

क्लीन टू मशीन कोड का कम्पीलिंग निम्नानुसार किया जाता है:

  1. स्रोत फ़ाइलें (.icl) और परिभाषा फ़ाइलें (.dcl) को क्लीन में लिखे गए कंपाइलर फ्रंटएंड द्वारा क्लीन के मूल संस्करण, कोर क्लीन में व्याख्या किया जाता है।
  2. व्याख्याकोर क्लीन को क्लीन और सी (प्रोग्रामिंग लैंग्वेज) में लिखे गए कंपाइलर बैकएंड द्वारा क्लीन की प्लेटफ़ॉर्म-स्वतंत्र मध्यवर्ती लैंग्वेज (.एबीसी) में परिवर्तित किया जाता है।
  3. इंटरमीडिएट एबीसी कोड को सी (प्रोग्रामिंग लैंग्वेज) में लिखे कोड जनरेटर द्वारा ऑब्जेक्ट कोड (.o) में परिवर्तित किया जाता है।
  4. ऑब्जेक्ट कोड को मॉड्यूल और कार्यावधि सिस्टम में अन्य फ़ाइलों के साथ जोड़ा जाता है और सिस्टम लिंकर (कंप्यूटिंग) (जब उपलब्ध हो) या विंडोज़ पर क्लीन में लिखे समर्पित लिंकर का उपयोग करके सामान्य निष्पादन योग्य में परिवर्तित किया जाता है।

क्लीन कंपाइलर के पहले संस्करण पूरी तरह से सी (प्रोग्रामिंग लैंग्वेज) में लिखे गए थे, इस टाइप बूटस्ट्रैपिंग (स्वोत्थान) समस्याओं से बचा गया था।

एबीसी मशीन

ऊपर उल्लिखित एबीसी कोड अमूर्त मशीन के लिए मध्यवर्ती प्रतिनिधित्व है। क्योंकि एबीसी कोड के लिए मशीन कोड जनरेशन अपेक्षाकृत सरल है, इससे नए संरचना का समर्थन करना आसान हो जाता है। एबीसी मशीन आदेशसूचक प्रोग्रामिंग अमूर्त ग्राफ पुनर्लेखन मशीन है।[12] इसमें दोबारा लिखे जा रहे क्लीन ग्राफ़ को रखने के लिए ग्राफ़ स्टोर और तीन स्टैक शामिल हैं। A(rgument)-स्टैक में ऐसे तर्क होते हैं जो ग्राफ़ स्टोर में नोड्स को संदर्भित करते हैं। B(asic मान)-स्टैक में बुनियादी मान (पूर्णांक, वर्ण, वास्तविक, आदि) होते हैं। हालाँकि यह बिल्कुल आवश्यक नहीं है (ये सभी तत्व ग्राफ़ स्टोर में भी नोड हो सकते हैं), एक अलग स्टैक का उपयोग करना अधिक कुशल है। C(ontrol)-स्टैक प्रवाह नियंत्रण के लिए निर्वाचित एड्रेस रखता है। कार्यावधि सिस्टम, जो प्रत्येक निष्पादन योग्य से जुड़ा हुआ है, एकStart बनाता है ग्राफ़ स्टोर में नोड और इसे ए-स्टैक पर जोर देता है। फिर यह आवश्यकतानुसार इसका मूल्यांकन करते हुए इसे प्रिंट करना प्रारंभ कर देता है।

ब्राउज़र में क्लीन चलाना

हालाँकि क्लीन का उपयोग आम तौर पर देशी निष्पादन योग्य बनाने के लिए किया जाता है, कई परियोजनाओं ने वेब ब्राउज़र में अनुप्रयोगों को सक्षम किया है। अब परित्यक्त SAPL प्रोजेक्ट ने कोर क्लीन को जावास्क्रिप्ट में संकलित किया और एबीसी कोड का उपयोग नहीं किया। 2019 से, वेबअसेंबली में लिखे गए एबीसी कोड के लिए दुभाषिया का उपयोग किया जाता है।[13][14]

प्लेटफ़ॉर्म

क्लीन माइक्रोसॉफ्ट विंडोज (IA-32 और X86-64), मैक ओएस (X86-64), और लिनक्स (IA-32, X86-64, और AArch64) के लिए उपलब्ध है।

कुछ लाइब्रेरी सभी प्लेटफ़ॉर्म पर उपलब्ध नहीं हैं, जैसे ऑब्जेक्टआईओ जो केवल विंडोज़ पर उपलब्ध है। साथ ही फ़ाइलों में गतिकी लिखने की सुविधा केवल विंडोज़ पर उपलब्ध है।

प्रति प्लेटफ़ॉर्म क्लीन की उपलब्धता प्रत्येक संस्करण के साथ भिन्न होती है:[15][16]

संस्करण तारीख लिनक्स मैक ओएस ओरेकल सोलारिस विंडोज विविध
IA-32 x86-64 AArch64 मोटोरोला 68040 पावरपीसी x86-64 स्पार्क IA-32 x86-64
3.1 5 जनवरी 2022 Yes Yes Yes No No Yes No Yes Yes
3.0 2 अक्टूबर 2018 Yes Yes No No No Yes No Yes Yes
2.4 23 दिसंबर 2011 Yes Yes No No No Yes No Yes Yes
2.3 22 दिसंबर 2010 Yes Yes No No No No No Yes Yes
2.2 19 दिसंबर 2006 Yes Yes No No Yes No Yes Yes Yes
2.1.1 31 मई 2005 Yes No No No Yes No Yes Yes No
2.1.0 31 अक्टूबर 2003 Yes No No No Yes No Yes Yes No
2.0.2 12 दिसंबर 2002 Yes No No No Yes No Yes Yes No
2.0.1 4 जुलाई 2002 Yes No No No Yes No Yes Yes No
2.0 21 दिसंबर 2001 No No No No No No No Yes No
1.3.3 13 सितंबर 2000 Yes No No No Yes No Yes Yes No
1.3.2 1 जुलाई 1999 No No No Yes Yes No Yes Yes No
1.3.1 जनवरी 1999 Yes No No No Yes No Yes Yes No
1.3 22 मई 1998 Yes No No No Yes No Yes Yes No
1.2.4 जून 1997 No No No Yes Yes No No Yes No
1.2.3 मई 1997 No No No Yes Yes No No Yes No
1.2 13 जनवरी 1997 No No No Yes Yes No No No No
1.1.3 अक्टूबर 1996 No No No No No No Yes No No ओएस/2 (i80386)
1.1.2 सितंबर 1996 Yes No No No No No Yes No No सनओएस 4 (स्पार्क)
1.1 मार्च 1996 Yes No No Yes No No No No No
1.0.2 सितंबर 1995 Yes No No Yes No No Yes No No ओएस/2 (i80386); सनओएस 4 (स्पार्क)
1.0 मई 1995 No No No Yes No No No No No ओएस/2 (i80386)
0.8.4 11 मई 1993 Yes No No Yes No No No No No प्रायोगिक T800 ट्रांसप्यूटर रिलीज़
0.8.3 26 फ़रवरी 1993 No No No Yes No No No No No
0.8.1 19 अक्टूबर 1992 No No No Yes No No No No No
0.8 13 जुलाई 1992 No No No Yes No No No No No ओएस/2 (i80386); सनओएस 3-4 (स्पार्क)
0.7 मई 1991 No No No Yes No No No No No सनओएस 3-4 (स्पार्क)


हास्केल से तुलना

2008 के बेंचमार्क (कंप्यूटिंग) से पता चला कि क्लीन नेटिव कोड बेंचमार्क के आधार पर हास्केल (ग्लासगो हास्केल कंपाइलर (जीएचसी)) के समान प्रदर्शन करता है।[17]

वाक्यगत अंतर

क्लीन का सिंटैक्स कुछ उल्लेखनीय अंतरों के साथ, हास्केल के समान है:[10]

हास्केल क्लीन टिप्पणियां
[ x | x <- [1..10] , isOdd x]
[ x \\ x <- [1..10] | isOdd x]
सूची समझ
x:xs
[x:xs]
विपक्ष ऑपरेटर
data Tree a
  = Empty
  | Node (Tree a) a (Tree a)
:: Tree a
  = Empty
  | Node (Tree a) a (Tree a)
बीजगणितीय डेटा प्रकार
(Eq a, Eq b) => ...
... | Eq a & Eq b
वर्ग के दावे और संदर्भ
fun t@(Node l x r) = ...
fun t=:(Node l x r) = ...
जैसे-पैटर्न
if x > 10 then 10 else x
if (x > 10) 10 x
अगर

सामान्य तौर पर, हास्केल ने क्लीन की तुलना में अधिक वाक्यात्मक शर्करा पेश की है।

संदर्भ

  1. "Download Clean". Clean. Retrieved 23 July 2019.
  2. "Idris - Uniqueness Types". Retrieved 2018-11-20.
  3. "Clean 0.7: Readme". Archived from the original on 2019-05-24.
  4. "Clean 1.0: Readme". Archived from the original on 2019-05-05.
  5. "Clean 1.3: Readme". Archived from the original on 2019-04-27.
  6. "Radboud University Nijmegen: Department of Software Science: Software".
  7. प्रश्न "सामान्य प्रश्न". Clean. Retrieved 2021-11-26. {{cite web}}: Check |url= value (help)
  8. "प्रकाशनों". Clean. Retrieved 2021-11-26.
  9. "घर". TOP Software Technology. Retrieved 26 November 2021.
  10. 10.0 10.1 ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  11. "Which programming languages are fastest?". Computer Language Benchmarks Game. Archived from the original on 28 June 2011.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  12. Koopman, Pieter (December 10, 1990). निष्पादन योग्य विशिष्टताओं के रूप में कार्यात्मक कार्यक्रम (PhD). Katholieke Universiteit Nijmegen. p. 35. ISBN 90-9003689-X.
  13. "Clean and iTasks / ABC Interpreter · GitLab". Clean and iTasks on GitLab (in English). Retrieved 13 April 2023.
  14. Staps, Camil; van Groningen, John; Plasmeijer, Rinus (15 July 2021). "सैंडबॉक्सिंग और वितरित सिस्टम के लिए संकलित और व्याख्या किए गए कोड की आलसी इंटरवर्किंग". Proceedings of the 31st Symposium on Implementation and Application of Functional Languages: 1–12. doi:10.1145/3412932.3412941.
  15. "रिलीज़ इतिहास". Clean. Retrieved 7 January 2022.
  16. "Index of /Clean". Retrieved 7 January 2022.
  17. Jansen, Jan Martin; Koopman, Pieter; Plasmeijer, Rinus (2008). "व्याख्या से संकलन तक" (PDF). Retrieved 2016-05-21. {{cite journal}}: Cite journal requires |journal= (help)


बाहरी संबंध