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

From Vigyanwiki
Revision as of 17:01, 21 August 2023 by Manidh (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
क्लीन
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)


बाहरी संबंध