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

क्लीन एक सामान्य प्रयोजन [[प्रोग्रामिंग भाषा]] है | सामान्य प्रयोजन विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग कंप्यूटर प्रोग्रामिंग भाषा। इसे समवर्ती स्वच्छ प्रणाली कहा गया, फिर स्वच्छ व्यवस्था, बाद में बस साफ़ करें. क्लीन को 1987 से निजमेजेन में रेडबौड विश्वविद्यालय के शोधकर्ताओं के एक समूह द्वारा विकसित किया गया है।

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

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

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

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

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


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

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

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

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

प्लेटफ़ॉर्म
क्लीन Microsoft Windows (IA-32 और X86-64), macOS (X86-64), और Linux (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