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

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

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

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

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

उदाहरण
हेलो वर्ल्ड प्रोग्राम: तथ्यात्मक: फिबोनाची अनुक्रम:

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

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

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


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

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

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

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

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

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

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

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

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

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

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

बाहरी संबंध

 * Clean Wiki
 * clean-lang.org: public registry with Clean packages
 * cloogle.org: a search engine to search in Clean packages