क्लीन (प्रोग्रामिंग लैंग्वेज)
File:Clean 3.0 (programming language) logo.svg | |
Paradigm | functional |
---|---|
द्वारा डिज़ाइन किया गया | Software Technology Research Group of Radboud University Nijmegen |
पहली प्रस्तुति | 1987 |
Stable release | 3.1
/ 5 January 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]
माइक्रोसॉफ़्ट विंडोज़ के लिए एकीकृत विकास वातावरण (आईडीई) क्लीन वितरण में शामिल है।
उदाहरण
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]
कम्पीलिंग (अनुभाषक)
क्लीन टू मशीन कोड का कम्पीलिंग निम्नानुसार किया जाता है:
- स्रोत फ़ाइलें (.icl) और परिभाषा फ़ाइलें (.dcl) को क्लीन में लिखे गए कंपाइलर फ्रंटएंड द्वारा क्लीन के मूल संस्करण, कोर क्लीन में व्याख्या किया जाता है।
- व्याख्याकोर क्लीन को क्लीन और सी (प्रोग्रामिंग लैंग्वेज) में लिखे गए कंपाइलर बैकएंड द्वारा क्लीन की प्लेटफ़ॉर्म-स्वतंत्र मध्यवर्ती लैंग्वेज (.एबीसी) में परिवर्तित किया जाता है।
- इंटरमीडिएट एबीसी कोड को सी (प्रोग्रामिंग लैंग्वेज) में लिखे कोड जनरेटर द्वारा ऑब्जेक्ट कोड (.o) में परिवर्तित किया जाता है।
- ऑब्जेक्ट कोड को मॉड्यूल और कार्यावधि सिस्टम में अन्य फ़ाइलों के साथ जोड़ा जाता है और सिस्टम लिंकर (कंप्यूटिंग) (जब उपलब्ध हो) या विंडोज़ पर क्लीन में लिखे समर्पित लिंकर का उपयोग करके सामान्य निष्पादन योग्य में परिवर्तित किया जाता है।
क्लीन कंपाइलर के पहले संस्करण पूरी तरह से सी (प्रोग्रामिंग लैंग्वेज) में लिखे गए थे, इस टाइप बूटस्ट्रैपिंग (स्वोत्थान) समस्याओं से बचा गया था।
एबीसी मशीन
ऊपर उल्लिखित एबीसी कोड अमूर्त मशीन के लिए मध्यवर्ती प्रतिनिधित्व है। क्योंकि एबीसी कोड के लिए मशीन कोड जनरेशन अपेक्षाकृत सरल है, इससे नए संरचना का समर्थन करना आसान हो जाता है। एबीसी मशीन आदेशसूचक प्रोग्रामिंग अमूर्त ग्राफ पुनर्लेखन मशीन है।[12] इसमें दोबारा लिखे जा रहे क्लीन ग्राफ़ को रखने के लिए ग्राफ़ स्टोर और तीन स्टैक शामिल हैं। A(rgument)-स्टैक में ऐसे तर्क होते हैं जो ग्राफ़ स्टोर में नोड्स को संदर्भित करते हैं। B(asic मान)-स्टैक में बुनियादी मान (पूर्णांक, वर्ण, वास्तविक, आदि) होते हैं। हालाँकि यह बिल्कुल आवश्यक नहीं है (ये सभी तत्व ग्राफ़ स्टोर में भी नोड हो सकते हैं), एक अलग स्टैक का उपयोग करना अधिक कुशल है। सी(ऑनट्रोल)-स्टैक प्रवाह नियंत्रण के लिए निर्वाचित एड्रेस रखता है। कार्यावधि सिस्टम, जो प्रत्येक निष्पादन योग्य से जुड़ा हुआ है, एक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 | 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 के बेंचमार्क (कंप्यूटिंग) से पता चला कि क्लीन नेटिव कोड बेंचमार्क के आधार पर हास्केल (ग्लासगो हास्केल कंपाइलर (जीएचसी)) के समान प्रदर्शन करता है।[17]
वाक्यगत अंतर
क्लीन का सिंटैक्स कुछ उल्लेखनीय अंतरों के साथ, हास्केल के समान है:[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.
- ↑ "Clean 0.7: Readme". Archived from the original on 2019-05-24.
- ↑ "Clean 1.0: Readme". Archived from the original on 2019-05-05.
- ↑ "Clean 1.3: Readme". Archived from the original on 2019-04-27.
- ↑ "Radboud University Nijmegen: Department of Software Science: Software".
- ↑ प्रश्न "सामान्य प्रश्न". 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
- ↑ "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) - ↑ Koopman, Pieter (December 10, 1990). निष्पादन योग्य विशिष्टताओं के रूप में कार्यात्मक कार्यक्रम (PhD). Katholieke Universiteit Nijmegen. p. 35. ISBN 90-9003689-X.
- ↑ "Clean and iTasks / ABC Interpreter · GitLab". Clean and iTasks on GitLab (in English). Retrieved 13 April 2023.
- ↑ 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.
- ↑ "रिलीज़ इतिहास". Clean. Retrieved 7 January 2022.
- ↑ "Index of /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