C--
सी-(उच्चारण सी माइनस माइनस) एक सी-जैसी प्रोग्रामिंग भाषा है, जिसे मानव प्रोग्रामरों द्वारा लिखे जाने के बजाय मुख्य रूप से उच्च-स्तरीय भाषाओं के लिए संकलकों द्वारा उत्पन्न करने के लिए डिज़ाइन किया गया है। यह कार्यात्मक प्रोग्रामिंग शोधकर्ताओं साइमन पेटन जोन्स और नॉर्मन रैमसे द्वारा बनाया गया था। कई अन्य मध्यवर्ती भाषाओं के विपरीत, इसे सरल ए. एस. सी. आई. आई. पाठ में दर्शाया जाता है, न कि बाइटकोड या किसी अन्य द्विआधारी प्रारूप में। दो मुख्य शाखाएँ हैंः सी--, मूल शाखा, अंतिम संस्करण 2 के साथ मई 2005 में जारी किया गया सी. एम. एम., ग्लासगो हास्केल कंपाइलर (जी. एच. सी.) डिजाइन सी में मध्यवर्ती प्रतिनिधित्व (आई. आर.) के रूप में सक्रिय रूप से उपयोग किया जाने वाला कांटा-एक "पोर्टेबल असेंबली भाषा" है, जिसे उच्च गुणवत्ता वाले मशीन कोड का उत्पादन करने वाले संकलकों के कार्यान्वयन को आसान बनाने के लिए डिज़ाइन किया गया है। यह निम्न-स्तरीय कोड-उत्पादन और कार्यक्रम अनुकूलन को सी-संकलक को सौंपकर किया जाता है। भाषा का वाक्यविन्यास सी से बहुत अधिक उधार लेता है, जबकि मानक सी विशेषताओं जैसे कि परिवर्तनशील कार्यों, सूचक वाक्यविन्यास और सी की प्रकार प्रणाली के पहलुओं को छोड़ देता है या बदल देता है, क्योंकि वे सी की आवश्यक विशेषताओं और कोड-पीढ़ी की आसानी में बाधा डालते हैं। भाषा का नाम एक मजाक है, जो दर्शाता है कि सी-- सी का एक छोटा रूप है, उसी तरह जैसे "सी + +" को सी के एक बेहतर संस्करण को संदर्भित करने के लिए चुना गया था। (सी में,-- और + + का अर्थ क्रमशः "कमी" और "वृद्धि" है।) सी-पर काम 1990 के दशक के अंत में शुरू हुआ। चूंकि एक कस्टम कोड जनरेटर लिखना अपने आप में एक चुनौती है, और उस समय शोधकर्ताओं के लिए उपलब्ध संकलक बैकएंड जटिल और खराब प्रलेखित थे, कई परियोजनाओं में संकलक लिखे गए थे जो सी कोड उत्पन्न करते थे (उदाहरण के लिए, मूल मॉड्यूला-3 संकलक)। हालांकि, कार्यात्मक भाषाओं के लिए सी एक खराब विकल्प हैः यह टेल-कॉल अनुकूलन की गारंटी नहीं देता है, या सटीक कचरा संग्रह या कुशल अपवाद हैंडलिंग का समर्थन नहीं करता है। सी-सी के लिए एक कसकर परिभाषित सरल विकल्प है जो इन सभी का समर्थन करता है। इसकी सबसे नवीन विशेषता एक रन-टाइम इंटरफेस है जो पोर्टेबल कचरा संग्रहकर्ताओं, अपवाद संचालन प्रणालियों और अन्य रन-टाइम सुविधाओं को लिखने की अनुमति देता है जो किसी भी सी-कंपाइलर के साथ काम करते हैं। सी-का पहला संस्करण अप्रैल 1998 में एम. एस. आर. ए. पेपर के रूप में जारी किया गया था, जिसके साथ कचरा संग्रह पर जनवरी 1999 का पेपर था। मई 1999 में एच. टी. एम. एल. के रूप में एक संशोधित नियमावली प्रकाशित की गई थी। नॉर्मन रैमसे ("प्रस्तावित परिवर्तन") और क्रिश्चियन लिंडिग ("एक नया व्याकरण") द्वारा 2000 में प्रस्तावित प्रमुख परिवर्तनों के दो सेटों ने सी-संस्करण 2 का नेतृत्व किया, जिसे 2004 के आसपास अंतिम रूप दिया गया और आधिकारिक तौर पर 2005 में जारी किया गया। प्रकार प्रणाली सी-प्रकार प्रणाली को उच्च-स्तरीय भाषाओं द्वारा लगाए गए सम्मेलनों के बजाय हार्डवेयर द्वारा लगाए गए प्रतिबंधों को प्रतिबिंबित करने के लिए डिज़ाइन किया गया है। रजिस्टर या मेमोरी में संग्रहीत मूल्य में केवल एक प्रकार हो सकता हैः बिट-वेक्टर। हालांकि, बिट-वेक्टर एक बहुरूपी प्रकार है जो कई चौड़ाई में आता है, जैसे। ,, या। फ्लोटिंग-पॉइंट प्रकारों का एक अलग 32-या-64 बिट परिवार समर्थित है। बिट-वेक्टर प्रकार के अलावा, सी-एक बूलियन प्रकार प्रदान करता है, जिसकी गणना अभिव्यक्तियों द्वारा की जा सकती है और इसका उपयोग नियंत्रण प्रवाह के लिए किया जा सकता है लेकिन इसे रजिस्टर या मेमोरी में संग्रहीत नहीं किया जा सकता है। जैसा कि एक असेंबली भाषा में, कोई भी उच्च प्रकार का अनुशासन, जैसे कि हस्ताक्षरित, अहस्ताक्षरित, फ्लोट और पॉइंटर के बीच अंतर, सी-ऑपरेटर या अन्य वाक्यात्मक संरचनाओं द्वारा लगाया जाता है। सी-टाइप-चेक नहीं किया जाता है, न ही यह कॉलिंग परंपरा को लागू करता है या चेक करता है। सी-संस्करण 2 बिट-वेक्टर और फ्लोटिंग-पॉइंट प्रकारों के बीच के अंतर को हटा देता है। इन प्रकारों को अन्य बातों के अलावा, एक चर के पूर्णांक बनाम फ्लोट टाइपिंग और इसके भंडारण व्यवहार (वैश्विक या स्थानीय) को अलग करने के लिए एक स्ट्रिंग "प्रकार" टैग के साथ एनोटेट किया जा सकता है। पहला उन लक्ष्यों पर उपयोगी है जिनमें पूर्णांक और फ़्लोटिंग-पॉइंट मानों के लिए अलग-अलग रजिस्टर हैं। संकेतों और मूल शब्द के लिए विशेष प्रकार पेश किए गए थे, हालांकि उन्हें लक्ष्य-निर्भर लंबाई के साथ एक बिट-वेक्टर के लिए मैप किया गया है। निम्नलिखित सी-कोड पूर्णांक 1 से एन (एन एक तर्क के रूप में प्राप्त किया जाता है) के योग और उत्पाद की गणना करता है। यह दो भाषा विशेषताओं को प्रदर्शित करता हैः प्रक्रियाएँ कई परिणाम दे सकती हैं। टेल रिकर्शन को स्पष्ट रूप से "जंप" मुख्य शब्द के साथ अनुरोध किया जाता है। / * टेल रिकर्शन */एक्सपोर्ट sp2; sp2 (बिट्स32 n) {जंप sp2 _ हेल्प (n, 1,1);} sp2 _ हेल्प (बिट्स32 n, बिट्स32 s, बिट्स32 p) {यदि n = = 1 {रिटर्न (s, p);} अन्यथा {जंप sp2 _ हेल्प (n-1, s + n, p * n);} कार्यान्वयन सी-के विनिर्देश पृष्ठ सी-के कुछ कार्यान्वयनों को सूचीबद्ध करता है। "सबसे सक्रिय रूप से विकसित" संकलक, क्विक सी--, को 2013 में छोड़ दिया गया था। हास्केल सी-के कुछ डेवलपर्स, जिनमें साइमन पेटन जोन्स, जोआओ डायस और नॉर्मन रैमसे शामिल हैं, जीएचसी पर काम करते हैं या काम करते हैं, जिनके विकास से सी-भाषा में विस्तार हुआ है, जिससे सी. एम. एम. बोली बनती है जो एर्गोनॉमिक्स के लिए सी प्रीप्रोसेसर का उपयोग करती है। जी. एच. सी. बैकएंड सी-को एल. एल. वी. एम. आई. आर., स्लो सी, या सीधे अंतर्निहित देशी बैकएंड के माध्यम से निष्पादन योग्य कोड में बदलने के लिए जिम्मेदार हैं। मूल इरादे के बावजूद, जी. एच. सी. सी.-पर अपने कई सामान्य अनुकूलन करता है। अन्य संकलक आई. आर. के साथ, सी-प्रतिनिधित्व को डिबगिंग के लिए डंप किया जा सकता है। लक्ष्य-विशिष्ट अनुकूलन बाद में बैकएंड द्वारा किए जाते हैं। बी. सी. पी. एल. एल. एल. वी. एम. संदर्भ बाहरी लिंक पुरानी आधिकारिक वेबसाइट का अभिलेखागार (cminusminus.org) त्वरित सी-कोड संग्रह (संदर्भ कार्यान्वयन) सी प्रोग्रामिंग भाषा परिवार संकलक भी देखें।