स्वच्छ (प्रोग्रामिंग भाषा)
121px | |
Paradigm | functional |
---|---|
द्वारा डिज़ाइन किया गया | Software Technology Research Group of Radboud University Nijmegen |
पहली प्रस्तुति | 1987 |
Stable release | 3.1
/ January 5, 2022 |
टाइपिंग अनुशासन | strong, static, dynamic |
ओएस | Cross-platform |
लाइसेंस | Simplified BSD[1] |
फ़ाइल नाम एक्सटेंशनएस | .icl, .dcl, .abc |
वेबसाइट | clean |
Influenced by | |
Lean, Miranda, Haskell | |
Influenced | |
Haskell, Idris[2] |
स्वच्छ एक सामान्य उद्देश्य वाली प्रोग्रामिंग भाषा है | सामान्य प्रयोजन के लिए विशुद्ध रूप से कार्यात्मक भाषा कंप्यूटर प्रोग्रामिंग भाषा है। इसे समवर्ती स्वच्छ प्रणाली कहा जाता था,[3] फिर स्वच्छ प्रणाली,[4][5] बाद में सिर्फ साफ करें। 1987 से निज्मेजेन में रेडबॉड विश्वविद्यालय के शोधकर्ताओं के एक समूह द्वारा स्वच्छ विकसित किया गया है।[6]
विशेषताएं
स्वच्छ भाषा पहली बार 1987 में सामने आई थी।[7] हालाँकि भाषा का विकास धीमा हो गया है, फिर भी कुछ शोधकर्ता अभी भी भाषा में काम कर रहे हैं।[8] 2018 में, एक स्पिन-ऑफ़ कंपनी की स्थापना की गई जो क्लीन का भी उपयोग करती है।[9] स्वच्छ एक छोटी सहोदर भाषा, हास्केल (प्रोग्रामिंग भाषा) के साथ कई गुणों और वाक्य-विन्यास को साझा करता है: संदर्भित पारदर्शिता, सूची की समझ, गार्ड (कंप्यूटिंग), कचरा संग्रह (कंप्यूटर विज्ञान), उच्च क्रम के कार्य, करी और आलसी मूल्यांकन। हालांकि, कार्यात्मक प्रोग्रामिंग में हास्केल के मोनाड्स के उपयोग के विपरीत, एक विशिष्ट प्रकार के माध्यम से म्यूटेबल स्थिति और I/O के साथ क्लीन डील करता है। कंपाइलर अधिक कुशल कोड उत्पन्न करने के लिए विशिष्टता प्रकार प्रणाली का लाभ उठाता है, क्योंकि यह जानता है कि कार्यक्रम के निष्पादन के दौरान किसी भी बिंदु पर, एक अद्वितीय प्रकार के मूल्य के लिए केवल एक संदर्भ मौजूद हो सकता है। इसलिए, एक अनूठा मूल्य विनाशकारी अद्यतन हो सकता है।[10] Microsoft Windows के लिए एक एकीकृत विकास वातावरण (IDE) स्वच्छ वितरण में शामिल है।
उदाहरण
हैलो वर्ल्ड प्रोग्राम: <वाक्यविन्यास प्रकाश लैंग = स्वच्छ>
स्टार्ट = हैलो, दुनिया!
</वाक्यविन्यास हाइलाइट> क्रमगुणित:
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
|
इंफिक्स नोटेशन ऑपरेटर:
<वाक्यविन्यास प्रकाश लैंग = स्वच्छ>
(^) इन्फिक्सर 8 :: इंट इंट -> इंट
(^) एक्स 0 = 1
(^) एक्स एन = एक्स * एक्स ^ (एन -1)
</वाक्यविन्यास हाइलाइट>
प्रकार की घोषणा में कहा गया है कि फ़ंक्शन प्राथमिकता 8 के साथ एक सही सहयोगी इंफिक्स ऑपरेटर है: यह बताता है कि x*x^(n-1)
के बराबर है x*(x^(n-1))
विरोध के रूप में (x*x)^(n-1)
. यह ऑपरेटर स्वच्छ मानक पुस्तकालय StdEnv में पूर्व-परिभाषित है।
साफ कैसे काम करता है
संगणना ग्राफ पुनर्लेखन और ग्राफ कमी पर आधारित है। संख्या जैसे स्थिरांक ग्राफ़ हैं और फ़ंक्शन ग्राफ़ पुनर्लेखन सूत्र हैं। यह, देशी कोड के संकलन के साथ मिलकर, कंप्यूटर भाषा बेंचमार्क गेम के अनुसार स्वच्छ प्रोग्राम बनाता है जो उच्च अमूर्तता का उपयोग अपेक्षाकृत तेजी से चलता है।[11]
संकलन
- सोर्स फाइल्स (.icl) और डेफिनिशन फाइल्स (.dcl) को कोर क्लीन में ट्रांसलेट किया जाता है, क्लीन का बेसिक वेरिएंट, क्लीन में।
- कोर क्लीन को क्लीन की प्लेटफॉर्म-इंडिपेंडेंट इंटरमीडिएट लैंग्वेज (.abc) में बदला जाता है, जिसे C (प्रोग्रामिंग लैंग्वेज) और क्लीन में लागू किया जाता है।
- इंटरमीडिएट एबीसी कोड सी (प्रोग्रामिंग भाषा) का उपयोग करके ऑब्जेक्ट कोड (.o) में परिवर्तित हो जाता है।
- ऑब्जेक्ट कोड मॉड्यूल और रनटाइम सिस्टम में अन्य फ़ाइलों के साथ जुड़ा हुआ है और सिस्टम लिंकर (कंप्यूटिंग) (जब उपलब्ध हो) या खिड़कियाँ पर क्लीन में लिखे एक समर्पित लिंकर का उपयोग करके एक सामान्य निष्पादन योग्य में परिवर्तित हो जाता है।
पहले क्लीन सिस्टम संस्करण पूरी तरह से सी (प्रोग्रामिंग लैंग्वेज) में लिखे गए थे, इस प्रकार बूटस्ट्रैपिंग मुद्दों से बचा जा सकता है।
एसएपीएल सिस्टम कोर क्लीन को जावास्क्रिप्ट में संकलित करता है और एबीसी कोड का उपयोग नहीं करता है।
एबीसी मशीन
कोर क्लीन, एक उच्च स्तरीय कार्यात्मक भाषा और मशीन कोड के बीच के अंतर को बंद करने के लिए एबीसी मशीन का उपयोग किया जाता है। यह एक अनिवार्य प्रोग्रामिंग एब्स्ट्रैक्ट ग्राफ रीराइटिंग मशीन है।[12] सार एबीसी कोड से कंक्रीट मशीन कोड उत्पन्न करना अपेक्षाकृत छोटा कदम है, इसलिए एबीसी मशीन का उपयोग करके कोड जनरेशन के लिए कई आर्किटेक्चर को लक्षित करना बहुत आसान है।
एबीसी मशीन में एक असामान्य मेमोरी एड्रेस # मेमोरी मॉडल है। इसमें एक साफ ग्राफ रखने के लिए एक ग्राफ स्टोर है जिसे फिर से लिखा जा रहा है। A(rgument)-स्टैक उन तर्कों को रखता है जो ग्राफ़ स्टोर में नोड्स को संदर्भित करते हैं। इस तरह, नोड के तर्कों को फिर से लिखा जा सकता है, जो पैटर्न मिलान के लिए आवश्यक है। B(asic value)-स्टैक मूल मान रखता है (पूर्णांक, वर्ण, वास्तविक, आदि)। जबकि सख्ती से जरूरी नहीं है (ये सभी तत्व ग्राफ स्टोर में भी नोड हो सकते हैं), एक अलग ढेर का उपयोग करना अधिक कुशल है। सी (ऑनट्रोल) -स्टैक प्रवाह नियंत्रण के लिए रिटर्न एड्रेस रखता है।
रनटाइम सिस्टम, जो प्रत्येक एक्जीक्यूटेबल से जुड़ा होता है, में एक होता है print
नियम जो आउटपुट चैनल में नोड को प्रिंट करता है। जब कोई प्रोग्राम निष्पादित किया जाता है, तो Start
नोड मुद्रित है। इसके लिए इसे रूट नॉर्मल फॉर्म में फिर से लिखना पड़ता है, इसके बाद इसके चिल्ड्रन को रूट नॉर्मल फॉर्म आदि में फिर से लिखा जाता है, जब तक कि पूरा नोड प्रिंट नहीं हो जाता।
प्लेटफॉर्म
Microsoft Windows (IA-32 और X86-64), macOS (X86-64), और Linux (IA-32, X86-64, और AArch64) के लिए क्लीन उपलब्ध है।
कुछ पुस्तकालय सभी प्लेटफार्मों पर उपलब्ध नहीं हैं, जैसे आपत्ति जो केवल विंडोज़ पर उपलब्ध है। साथ ही फाइलों में डायनेमिक्स लिखने की सुविधा केवल विंडोज पर उपलब्ध है।
स्वच्छ प्रति प्लेटफॉर्म की उपलब्धता प्रत्येक संस्करण के साथ बदलती है:[13][14]
Version | Date | Linux | macOS | Oracle Solaris | Windows | Miscellaneous | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
IA-32 | X86-64 | AArch64 | Motorola 68040 | PowerPC | X86-64 | SPARC | IA-32 | X86-64 | |||
3.1 | January 5, 2022 | Yes | Yes | Yes | No | No | Yes | No | Yes | Yes | |
3.0 | October 2, 2018 | Yes | Yes | No | No | No | Yes | No | Yes | Yes | |
2.4 | December 23, 2011 | Yes | Yes | No | No | No | Yes | No | Yes | Yes | |
2.3 | December 22, 2010 | Yes | Yes | No | No | No | No | No | Yes | Yes | |
2.2 | December 19, 2006 | Yes | Yes | No | No | Yes | No | Yes | Yes | Yes | |
2.1.1 | May 31, 2005 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
2.1.0 | October 31, 2003 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
2.0.2 | December 12, 2002 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
2.0.1 | July 4, 2002 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
2.0 | December 21, 2001 | No | No | No | No | No | No | No | Yes | No | |
1.3.3 | September 13, 2000 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
1.3.2 | July 1, 1999 | No | No | No | Yes | Yes | No | Yes | Yes | No | |
1.3.1 | January 1999 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
1.3 | May 22, 1998 | Yes | No | No | No | Yes | No | Yes | Yes | No | |
1.2.4 | June 1997 | No | No | No | Yes | Yes | No | No | Yes | No | |
1.2.3 | May 1997 | No | No | No | Yes | Yes | No | No | Yes | No | |
1.2 | January 13, 1997 | No | No | No | Yes | Yes | No | No | No | No | |
1.1.3 | October 1996 | No | No | No | No | No | No | Yes | No | No | OS/2 (i80386) |
1.1.2 | September 1996 | Yes | No | No | No | No | No | Yes | No | No | SunOS 4 (SPARC) |
1.1 | March 1996 | Yes | No | No | Yes | No | No | No | No | No | |
1.0.2 | September 1995 | Yes | No | No | Yes | No | No | Yes | No | No | OS/2 (i80386); SunOS 4 (SPARC) |
1.0 | May 1995 | No | No | No | Yes | No | No | No | No | No | OS/2 (i80386) |
0.8.4 | May 11, 1993 | Yes | No | No | Yes | No | No | No | No | No | Experimental T800 transputer release |
0.8.3 | February 26, 1993 | No | No | No | Yes | No | No | No | No | No | |
0.8.1 | October 19, 1992 | No | No | No | Yes | No | No | No | No | No | |
0.8 | July 13, 1992 | No | No | No | Yes | No | No | No | No | No | OS/2 (i80386); SunOS 3–4 (SPARC) |
0.7 | May 1991 | No | No | No | Yes | No | No | No | No | No | SunOS 3–4 (SPARC) |
== हास्केल == की तुलना
2008 के एक बेंचमार्क ने दिखाया कि बेंचमार्क के आधार पर क्लीन नेटिव कोड हास्केल (प्रोग्रामिंग लैंग्वेज) (ग्लासगो हास्केल कंपाइलर) के समान ही अच्छा प्रदर्शन करता है।[15]
वाक्यगत अंतर
स्वच्छ का सिंटैक्स हास्केल के सिंटैक्स के समान है, कुछ उल्लेखनीय अंतरों के साथ:[10]
Haskell | Clean | Remarks |
---|---|---|
[ x | x <- [1..10] , isOdd x]
|
[ x \\ x <- [1..10] | isOdd x]
|
list comprehension |
x:xs
|
[x:xs]
|
cons operator |
data Tree a
= Empty
| Node (Tree a) a (Tree a)
|
:: Tree a
= Empty
| Node (Tree a) a (Tree a)
|
algebraic data type |
(Eq a, Eq b) => ...
|
... | Eq a & Eq b
|
class assertions and contexts |
fun t@(Node l x r) = ...
|
fun t=:(Node l x r) = ...
|
as-patterns |
if x > 10 then 10 else x
|
if (x > 10) 10 x
|
if |
सामान्य तौर पर, हास्केल ने क्लीन की तुलना में अधिक सिंटैक्टिक चीनी पेश की है।
संदर्भ
- ↑ "Download Clean". Clean. Retrieved 23 July 2019.
- ↑ "Idris - Uniqueness Types". Retrieved 2018-11-20.
- ↑ "स्वच्छ 0.7: रीडमे". Archived from the original on 2019-05-24.
- ↑ "स्वच्छ 1.0: रीडमे". Archived from the original on 2019-05-05.
- ↑ "स्वच्छ 1.3: README". Archived from the original on 2019-04-27.
- ↑ "रैडबौड विश्वविद्यालय निज्मेजेन: सॉफ्टवेयर विज्ञान विभाग: सॉफ्टवेयर".
- ↑ प्रश्न "सामान्य प्रश्न". Clean. Retrieved 2021-11-26.
{{cite web}}
: Check|url=
value (help) - ↑ "प्रकाशनों". Clean. Retrieved 2021-11-26.
- ↑ "घर". TOP Software Technology. Retrieved 26 November 2021.
- ↑ 10.0 10.1 ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
- ↑ "कौन सी प्रोग्रामिंग लैंग्वेज सबसे तेज हैं?". Computer Language Benchmarks Game. Archived from the original on 28 June 2011.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link) - ↑ Koopman, Pieter (December 10, 1990). निष्पादन योग्य विनिर्देशों के रूप में कार्यात्मक कार्यक्रम (PhD). Katholieke Universiteit Nijmegen. p. 35. ISBN 90-9003689-X.
- ↑ "रिलीज इतिहास". Clean. Retrieved 7 January 2022.
- ↑ "सूचकांक के /Clean". Retrieved 7 January 2022.
- ↑ Jansen, Jan Martin; Koopman, Pieter; Plasmeijer, Rinus (2008). "व्याख्या से संकलन तक" (PDF). Retrieved 2016-05-21.
{{cite journal}}
: Cite journal requires|journal=
(help)
इस पेज में लापता आंतरिक लिंक की सूची
- सामान्य प्रयोजन प्रोग्रामिंग भाषा
- रेडबौड विश्वविद्यालय
- विलक्षणता प्रकार
- सूची समझ
- कार्यात्मक प्रोग्रामिंग में मोनाद
- संदर्भात्मक पारदर्शिता
- उच्च क्रम कार्य करता है
- एकीकृत विकास पर्यावरण
- कारख़ाने का
बाहरी कड़ियाँ
- Clean Wiki
- clean-lang.org: public registry with Clean packages
- cloogle.org: a search engine to search in Clean packages
श्रेणी: कार्यात्मक भाषाएं श्रेणी: टर्म-रिराइटिंग प्रोग्रामिंग लैंग्वेज श्रेणी:मुफ्त संकलक और दुभाषिए श्रेणी:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर