क्या सी प्रोग्रामिंग भाषा को निम्न स्तर की भाषा माना जाता था जब वह बाहर आती थी?


151

वर्तमान में C को निम्न स्तर की भाषा माना जाता है , लेकिन 70 के दशक में इसे निम्न स्तर माना जाता था? क्या तब भी शब्द प्रयोग में था?

80 के दशक के मध्य तक और उसके बाद भी कई लोकप्रिय उच्च स्तरीय भाषाओं का अस्तित्व नहीं था, इसलिए मैं उत्सुक हूं कि क्या और कैसे निम्न स्तर की प्रकृति पिछले कुछ वर्षों में बदल गई है।


13
एक डेटा बिंदु के रूप में, लगभग 1978 के कुछ प्रोग्रामिंग मेंटर्स ने C को मेरे लिए एक गौरवशाली विधानसभा भाषा के रूप में वर्णित किया।
बेन क्रॉउल

7
@BenCrowell मुझे यकीन नहीं है कि आपके कथन के संदर्भ में "महिमामंडित" का मतलब क्या है, लेकिन मैंने सी ( एक सार्वभौमिक (= प्लेटफ़ॉर्म-स्वतंत्र) असेंबली भाषा में कॉलिंग का अनुभव किया है ।
मेलेबियस

13
दिलचस्प बात यह है कि ऐसा मामला बनाया जा रहा है कि सी एक लो-लेवल लैंग्वेज नहीं है , और 70 के दशक की तुलना में यह अब कम है , क्योंकि सी की एब्सट्रैक्ट मशीन आधुनिक हार्डवेयर से दूर है क्योंकि यह पीडीपी -11 से थी।
टॉम

5
यह सोचते हुए आप मूल के बारे में भी सोचना चाहते होंगे - यूनिक्स सी में लिखा गया है, सी यूनिक्स पर चलता है और यूनिक्स को अन्य प्लेटफार्मों पर क्रॉस-संकलित करता है। यूनिक्स को संकलित करने के लिए आवश्यक कुछ भी अनावश्यक ओवरहेड नहीं था, और सी का मुख्य लक्ष्य जितना संभव हो सके एक कंपाइलर लिखना / पोर्ट करना आसान बनाना था। इस प्रयोजन के लिए यह सटीक सही स्तर था, इसलिए मैं सी को उच्च या निम्न स्तर के बारे में नहीं सोचता, मैं इसे यूनिक्स को पोर्ट करने के लिए एक उपकरण के रूप में समझता हूं, जो लगभग सभी यूनिक्स उपकरणों की तरह, कई समस्याओं के लिए बेहद अनुकूल है।
बिल के

4
यह ध्यान देने योग्य है कि लिस्प का आविष्कार 1958
प्राइम

जवाबों:


144

प्रश्न के ऐतिहासिक पहलुओं का उत्तर देने के लिए:

ब्रायन केर्निगन और सी डिजाइनर डेनिस रिची द्वारा लिखित सी प्रोग्रामिंग भाषा में डिज़ाइन दर्शन की व्याख्या की गई है , "के एंड आर" जो आपने सुना होगा। पहले संस्करण के लिए प्रस्तावना कहती है

सी एक "बहुत उच्च स्तरीय" भाषा नहीं है, न ही एक "बड़ा" ...

और परिचय कहता है

सी एक अपेक्षाकृत "निम्न स्तर" की भाषा है ... सी सीधे संरेखित वस्तुओं जैसे चरित्र के तार, सेट, सूचियों या सरणियों से निपटने के लिए कोई संचालन प्रदान नहीं करता है। ऐसे कोई ऑपरेशन नहीं हैं जो एक संपूर्ण सरणी या स्ट्रिंग में हेरफेर करते हैं ...

पाठ जारी रहने से पहले सूची थोड़ी देर के लिए चलती है:

हालांकि इनमें से कुछ विशेषताओं की अनुपस्थिति गंभीर कमी की तरह लग सकती है, ... भाषा को मामूली आकार तक रखने के वास्तविक लाभ हैं।

(मेरे पास केवल 1988 से दूसरा संस्करण है, लेकिन नीचे दी गई टिप्पणी से संकेत मिलता है कि उद्धृत पाठ 1978 के पहले संस्करण में समान है।)

तो, हाँ, शब्द "उच्च स्तर" और "निम्न स्तर" तब वापस उपयोग में थे, लेकिन C को बीच में स्पेक्ट्रम पर कहीं गिरने के लिए डिज़ाइन किया गया था। सी में कोड लिखना संभव था जो कि हार्डवेयर प्लेटफार्मों में पोर्टेबल था, और उस समय के लिए एक भाषा को उच्च स्तर माना जाता था, इसके लिए मुख्य मानदंड था। हालांकि, सी में कुछ विशेषताओं की कमी थी जो उच्च स्तरीय भाषाओं की विशेषता थी, और यह सादगी के पक्ष में एक डिजाइन निर्णय था।


42
यह एक उत्कृष्ट उत्तर है! सत्यापन योग्य ऐतिहासिक साक्ष्य + एक अभिनेता की गवाही जो ओपी को संदर्भित करता है उस अवधि में निम्न और उच्च स्तर के अर्थ से अवगत कराया। वैसे, मैं पुष्टि करता हूं कि उद्धरण 1978 के संस्करण में पहले से ही थे।
क्रिस्टोफ़

157

यह उच्च-स्तरीय और निम्न-स्तरीय भाषा की आपकी परिभाषा पर निर्भर करता है। जब सी विकसित किया गया था, तो विधानसभा की तुलना में उच्च-स्तरीय कुछ भी उच्च-स्तरीय भाषा माना जाता था। यह स्पष्ट करने के लिए एक कम बार है। बाद में, यह शब्दावली इस बिंदु पर स्थानांतरित हो गई कि कुछ आजकल जावा को एक निम्न-स्तरीय भाषा भी मानते हैं।

70 के दशक के उच्च-स्तरीय भाषा परिदृश्य में भी, यह इंगित करने योग्य है कि C काफी निम्न स्तर है। सी भाषा मूल रूप से बी प्लस एक सरल प्रकार की प्रणाली है, और बी असेंबली के लिए एक सुविधाजनक प्रक्रियात्मक / संरचित वाक्यविन्यास परत से बहुत अधिक नहीं है। क्योंकि टाइप सिस्टम अप्रचलित बी भाषा के शीर्ष पर एक रेट्रो-फिट है, आप अभी भी कुछ स्थानों पर टाइप एनोटेशन छोड़ सकते हैं और intमान लिया जाएगा।

C सचेत रूप से महंगी या मुश्किल से उन विशेषताओं को लागू करना छोड़ देता है जो उस समय पहले से ही अच्छी तरह से स्थापित थीं, जैसे कि

  • स्वचालित स्मृति प्रबंधन
  • नेस्टेड कार्य या बंद
  • मूल OOP या कोरआउट्स
  • अधिक स्पष्ट प्रकार की प्रणालियाँ (जैसे श्रेणी-प्रतिबंधित प्रकार, उपयोगकर्ता-परिभाषित प्रकार जैसे रिकॉर्ड प्रकार, मजबूत टाइपिंग, ...)

सी में कुछ दिलचस्प विशेषताएं हैं:

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

जिस समय C विकसित किया गया था, उस समय अन्य नवीन भाषाएँ जैसे COBOL, Lisp, ALGOL (विभिन्न बोलियों में), PL / I, SNOBOL, Simula, और पास्कल पहले ही प्रकाशित हो चुकी थीं और / या विशिष्ट समस्या डोमेन के लिए व्यापक उपयोग में थीं। लेकिन उन मौजूदा भाषाओं में से अधिकांश मेनफ्रेम प्रोग्रामिंग के लिए थीं, या अकादमिक अनुसंधान परियोजनाएं थीं। जब ALGOL-60 को पहली बार एक सार्वभौमिक प्रोग्रामिंग भाषा के रूप में डिज़ाइन किया गया था, तो इसे लागू करने के लिए आवश्यक तकनीक और कंप्यूटर विज्ञान अभी तक मौजूद नहीं था। इनमें से कुछ (कुछ ALGOL बोलियाँ, PL / I, पास्कल) भी निम्न-स्तरीय प्रोग्रामिंग के लिए अभिप्रेत थीं, लेकिन वे अधिक जटिल संकलक थे या बहुत सुरक्षित थे (जैसे कोई अप्रतिबंधित संकेत नहीं)। पास्कल उल्लेखनीय रूप से चर-लंबाई सरणियों के लिए अच्छे समर्थन का अभाव है।

उन भाषाओं की तुलना में, C निम्न-स्तरीय विकास के लिए अधिक व्यावहारिक होने के लिए "सुरुचिपूर्ण" और महंगी सुविधाओं को अस्वीकार करता है। सी कभी भी मुख्य रूप से एक भाषा डिजाइन अनुसंधान परियोजना नहीं थी। इसके बजाय, यह पीडीपी -11 मिनीकंप्यूटर पर यूनिक्स कर्नेल विकास का एक हिस्सा था जो तुलनात्मक रूप से संसाधन-विवश था। इसके आला के लिए (यूनिक्स लिखने के लिए एक न्यूनतम-निम्न-स्तरीय भाषा, जो पोर्ट पास करना आसान है) C बिल्कुल उत्कृष्ट है - और 45 साल बाद भी यह अभी भी सिस्टम प्रोग्रामिंग की भाषा है


17
मौजूदा ALGOL परिवार और पास्कल भाषाओं के लिए जरूरी चीजों से अनजान लोगों के लिए बस एक छोटा सा जोड़: उन भाषाओं में लेक्सिक रूप से नेस्टेड फ़ंक्शन थे जहां आप बाहरी कार्यों में घोषित (स्थानीय) चर का उपयोग कर सकते थे। इसका मतलब है कि या तो आपको एक "डिस्प्ले" बनाए रखना था - बाहरी लेक्सिकल स्कोप्स के लिए पॉइंटर्स की एक सरणी - प्रत्येक फ़ंक्शन कॉल और रिटर्न (जो कि लेक्सिकल स्तर बदल गया) पर - या आपको स्टैक और प्रत्येक वेरिएबल एक्सेस तक लेक्सिकल स्कोप्स को चेन करना था आवश्यक कई अप्रत्यक्ष इसे खोजने के लिए ढेर हो जाता है। महंगा! सी ने वह सब झेला। मुझे अभी भी याद आती है।
दाविदबक

12
@davidbak: x86-64 सिस्टम V ABI (उर्फ लिनक्स / OS X पर कॉलिंग कन्वेंशन) %r10"स्टैटिक चेन पॉइंटर" के रूप में परिभाषित करता है , जिसके बारे में आप बात कर रहे हैं। सी के लिए यह सिर्फ एक और कॉल-क्लॉबर स्क्रैच रजिस्टर है, लेकिन मुझे लगता है कि पास्कल इसका इस्तेमाल करेगा। (GNU C नेस्टेड फ़ंक्शंस इसका उपयोग पॉइंटर को बाहरी दायरे में पास करने के लिए करते हैं जब ऐसा फ़ंक्शन इनलाइन नहीं होता है (जैसे कि यदि आप इसे फ़ंक्शन पॉइंटर बनाते हैं तो कंपाइलर स्टैक पर मशीन कोड का एक ट्रैम्पोलिन बनाता है): नियमित रूप से स्वीकार्यता r10 और r11 का उपयोग )
पीटर कॉर्ड्स

2
@PeterCordes आकर्षक! पास्कल अभी भी व्यापक रूप से इस्तेमाल किया गया था जब सिस्टम वी बाहर आया था (हालांकि मुझे नहीं पता है कि औपचारिक एसवाईएसवी एबीआई को कब परिभाषित किया गया था)। आपका जुड़ा हुआ उत्तर बहुत जानकारीपूर्ण है।
दाविदबक

3
C में उपयोगकर्ता-परिभाषित प्रकार (संरचना / संघ) है। उन "सुविधाओं" के बाकी हिस्सों को छोड़ दिया गया था, मुझे संदेह है, क्योंकि वे शून्य या नकारात्मक उपयोग के हैं (जब तक कि आप एक विषम कोड प्रतियोगिता में प्रवेश नहीं कर रहे हैं :-)), क्योंकि वे भाषा को सरल और अभिव्यंजक दोनों रखने के लक्ष्य से अलग हो जाते हैं ।
२५ बजे jamesqf

6
@jamesqf: लेकिन बहुत जल्दी C के पास स्ट्रक्चर असाइनमेंट नहीं था; मुझे लगता है कि आपको a = b;आईएसओ C89 में जिस तरह से आप कर सकते हैं एक पूरी संरचना की प्रतिलिपि लिखने के बजाय सदस्यों को व्यक्तिगत रूप से याद या कॉपी करना होगा । इसलिए शुरुआती सी में, उपयोगकर्ता-परिभाषित प्रकार निश्चित रूप से द्वितीय श्रेणी के थे और केवल फ़ंक्शन आर्ग के रूप में संदर्भ द्वारा पारित किया जा सकता था। C का एरेस के लिए एब्रोशन
पीटर कॉर्ड्स

37

1970 के दशक के प्रारंभ में, C आधुनिक निर्माणों का उपयोग करते हुए ताजी हवा की एक चकाचौंध भरी सांस थी, ताकि पूरी UNIX प्रणाली को असंगत स्थान या प्रदर्शन दंड के साथ असेंबली भाषा से C में फिर से लिखा जा सके। उस समय कई समकालीनों ने इसे उच्च स्तरीय भाषा के रूप में संदर्भित किया।

सी के लेखक, मुख्य रूप से डेनिस रिची, अधिक परिधि वाले थे और बेल सिस्टम टेक्निकल जर्नल लेख में कहा गया था कि "सी बहुत उच्च स्तरीय भाषा नहीं है।" एक मुस्कुराहट के साथ और उत्तेजक होने का इरादा रखते हुए, डेनिस रिची का कहना था कि यह एक निम्न-स्तरीय भाषा थी। C के लिए उनके डिजाइन लक्ष्यों में प्रमुख यह था कि मशीन के पास की भाषा को अभी तक पोर्टेबिलिटी प्रदान करना है, यानी मशीन स्वतंत्रता।

अधिक जानकारी के लिए मूल BSTJ लेख से परामर्श करें:

शुक्रिया डेनिस। भगवान आपकी आत्मा को शान्ति दे।


3
यह मूल रूप से टाइप किया गया था और यदि आप मुझसे पूछें तो पीडीपी विधानसभा के लिए अच्छे-वाक्यविन्यास आवरण।
einpoklum


2
@einpoklum मैं इससे सहमत हूं। मैंने विश्वविद्यालय में लगभग 1980 में एक पीडीपी -11 / 34 ए पर सी बैक सीखा, जैसा कि ऐसा होता है, और इसे एक प्रोफेसर द्वारा "पोर्टेबल असेंबली भाषा" के रूप में वर्णित किया गया था। संभवतः क्योंकि PDP-11 के अलावा, हमारे पास लैब में कई सुपरब्रेन CP / M मशीनें थीं जिनके लिए C कंपाइलर उपलब्ध थे। en.wikipedia.org/wiki/Intertec_Superbrain
dgnuff

2
सत्यापन योग्य ऐतिहासिक साक्ष्यों के आधार पर भी एक उत्कृष्ट उत्तर (वाह! वहां उपलब्ध K & R का पूर्व संस्करण था!)।
क्रिस्टोफ़

7
@einpoklum क्या यह कुछ दूर की कौड़ी नहीं है? मुझे 80 के दशक के मध्य में सिस्टम और एप्लिकेशन कोड को असेम्बलर (Z80 और M68K) में लिखने का अवसर मिला, एक "पोर्टेबल असेंबलर" जिसे एम (पीडीपी 11 सिंटैक्स एक अमूर्त 16 बिट रजिस्टर और इंस्ट्रक्शन सेट के साथ) कहा जाता है, और कोडांतरक की तुलना में सी। , सी निश्चित रूप से एक उच्च स्तरीय भाषा है: सी प्रोग्रामिंग की उत्पादकता असेंबलर की तुलना में अधिक परिमाण का एक आदेश था! बेशक कोई तार (SNOBOL), कोई देशी डेटाफ़ाइल समर्थन (COBOL), कोई स्व-उत्पादक कोड (LISP), कोई उन्नत गणित (APL), कोई ऑब्जेक्ट (SIMULA) नहीं है, इसलिए हम इस बात से सहमत हो सकते हैं कि यह बहुत अधिक नहीं था
Christophe

21

जैसा कि मैंने इस साइट पर कहीं और लिखा है जब किसी ने मॉलॉक / मुफ्त मेमोरी प्रबंधन पैटर्न को "निम्न-स्तरीय प्रोग्रामिंग" के रूप में संदर्भित किया है।

मजेदार है कि कैसे "निम्न-स्तर" की परिभाषा समय के साथ बदलती है। जब मैं पहली बार प्रोग्राम करना सीख रहा था, तो कोई भी भाषा जो एक मानकीकृत हीप मॉडल प्रदान करती थी, जो एक सरल आवंटित / मुक्त पैटर्न संभव बनाती है, वास्तव में उच्च-स्तरीय माना जाता था। में निम्न स्तर के प्रोग्रामिंग, आप स्मृति अपने आप को, पर नज़र रखने होगा (नहीं आवंटन, लेकिन स्मृति स्थल के लिए खुद को!), या अपने स्वयं के ढेर संभाजक बारे में यदि आप वास्तव में कल्पना महसूस कर रहे थे।

संदर्भ के लिए, यह 90 के दशक की शुरुआत में था, सी के बाहर आने के बाद अच्छी तरह से।


क्या मानक पुस्तकालय अंत -80 के दशक में मानकीकरण (मौजूदा यूनिक्स एपीआई पर आधारित) के बाद से केवल एक चीज नहीं थी? इसके अलावा, कर्नेल प्रोग्रामिंग (जो C की मूल समस्या डोमेन थी) स्वाभाविक रूप से मैनुअल मेमोरी प्रबंधन जैसे निम्न-स्तरीय सामान की आवश्यकता होती है। उस समय C उच्चतम स्तरीय प्रोग्रामिंग भाषा रही होगी जिसमें एक गंभीर कर्नेल लिखा गया था (मुझे लगता है कि आजकल NT कर्नेल C ++ की उचित मात्रा का उपयोग करता है)।
आमोन

6
@ मैं, मैंने अल्गोल 60, दो अलग-अलग फोरट्रान बोलियों, और 1970 के दशक में कई अलग-अलग बुनियादी बोलियों का इस्तेमाल किया, और उनमें से किसी भी भाषा में संकेत या ढेर आवंटनकर्ता नहीं थे।
सोलोमन स्लो

7
सख्ती से बोलना, आप अभी भी malloc()सीधे कॉल करके brk(2)या mmap(2)परिणामी मेमोरी को स्वयं प्रबंधित करने के साथ नहीं के साथ प्रोग्राम कर सकते हैं । यह बिना किसी बोधगम्य लाभ के एक बड़े पैमाने पर PITA है (जब तक कि आप एक मॉलोक जैसी चीज को लागू नहीं करते हैं ), लेकिन आप इसे कर सकते हैं।
केविन

1
@amon - उल्लेखनीय बरोज़ स्टैक-आधारित मशीनों को छोड़कर, जिन्हें ALGOL में नीचे से ऊपर तक प्रोग्राम किया गया था ... और यूनिक्स की तुलना में बहुत पहले। ओह, और वैसे, मल्टीिक्स, जो यूनिक्स के लिए प्रेरणा थी: पीएल / आई में लिखा गया था। ALGOL के समान, सी। से उच्च स्तर
davidbak

6
वास्तव में, हम में से अधिक का कारण आज मल्टीिक्स का उपयोग नहीं कर रहे हैं, शायद इस तथ्य से अधिक है कि यह केवल नारकीय महंगे मेनफ्रेम पर ही चलता है - यानी, दिन का सामान्य अपमानजनक मेनफ्रेम खर्च और आधे से एक कैबिनेट का अतिरिक्त खर्च सुरक्षा के साथ वर्चुअल मेमोरी को लागू करने के लिए विशेष हार्डवेयर। जब VAX-11 जैसी 32-बिट मिनीकंप्यूटर सभी के सामने आए, लेकिन बैंकों और सरकार ने आईबीएम और सेवेन ड्वार्फ से अलग कर दिया और अपने बड़े पैमाने पर प्रसंस्करण को "मिनी" कंप्यूटरों में ले लिया।
दाविदक

15

कई जवाबों ने पहले ही शुरुआती लेखों को संदर्भित कर दिया है जिसमें कहा गया है कि "सी एक उच्च स्तरीय भाषा नहीं है"।

हालांकि, मैं बहुत अधिक या सभी HLLs - Algol, Algol-60, PL / 1, पास्कल - उपलब्ध बाउंड चेकिंग और न्यूमेरिक ओवरफ़्लो का पता लगाने के समय पर नहीं कर सकता हूँ।

अंतिम मैंने बफर और पूर्णांक ओवरफ्लो की जाँच की, कई सुरक्षा कमजोरियों का मूल कारण था। ... हाँ, अभी भी मामला ...

गतिशील मेमोरी प्रबंधन के लिए स्थिति अधिक जटिल थी, लेकिन फिर भी, सुरक्षा के मामले में सी स्टाइल मॉलोक / फ्री एक शानदार कदम था।

इसलिए यदि एचएलएल की आपकी परिभाषा में "स्वचालित रूप से कई निम्न स्तर के कीड़े शामिल हैं", तो ठीक है, साइबर सिक्योरिटी की क्षमा स्थिति बहुत भिन्न होगी, शायद बेहतर, अगर सी और यूनिक्स नहीं हुआ था।


7
जब से मैं इंटेल MPX के कार्यान्वयन और पॉइंटर / बाउंड्स की जाँच करने वाले कंपाइलर के कार्यान्वयन में शामिल हुआ हूं, अगर वह बाहर निकलता है, तो मैं आपको उनके प्रदर्शन पर कागजात का उल्लेख कर सकता हूं: अनिवार्य रूप से 5-15%। इसमें से अधिकांश में कंपाइलर विश्लेषण शामिल हैं जो 1970 और 1980 के दशक में मुश्किल से संभव थे - 50% धीमे होने वाले भोले चेक की तुलना में। हालांकि, मुझे लगता है कि यह कहना उचित है कि सी और यूनिक्स ने 20 साल तक ऐसे विश्लेषणों पर काम किया - जब सी सबसे लोकप्रिय प्रोग्रामिंग भाषा बन गई, तो सुरक्षा की बहुत कम मांग थी।
क्रेजी गेलव

9
@jamesqf इसके अलावा, C से पहले की कई मशीनों में सीमा की जाँच और पूर्णांक के लिए विशेष हार्डवेयर समर्थन था। चूंकि सी ने उस एचडब्ल्यू का उपयोग नहीं किया था, इसलिए अंततः इसे हटा दिया गया और हटा दिया गया।
क्रेजी ग्लीव

5
@jamesqf उदाहरण के लिए: MIPS RISC ISA मूल रूप से स्टैनफोर्ड बेंचमार्क पर आधारित था, जिसे मूल रूप से पास्कल में लिखा गया था, केवल बाद में C. में स्थानांतरित कर दिया गया क्योंकि Pascal ने हस्ताक्षरित पूर्णांक अतिप्रवाह के लिए जाँच की, इसलिए ADD जैसे निर्देशों में MIPS किया। सर्पा 2010 मैं MIPS में काम कर रहा था, मेरे बॉस MIPSr6 ​​में अप्रयुक्त निर्देशों को हटाना चाहते थे, और अध्ययनों से पता चला है कि अतिप्रवाह चेक का उपयोग लगभग कभी नहीं किया गया था। लेकिन यह पता चला कि जावास्क्रिप्ट ने ऐसे चेक किए - लेकिन ओएस समर्थन की कमी के कारण सस्ते निर्देशों का उपयोग नहीं कर सका।
क्रेजी गेलव

3
@KrazyGlew - यह बहुत दिलचस्प है कि आप इसे सी / सी ++ के बाद से लाते हैं क्योंकि हस्ताक्षर किए गए पूर्णांक ओवरफ़्लो के कारण "अपरिभाषित व्यवहार" को लेकर उपयोगकर्ताओं और कंपाइलर लेखकों के बीच लड़ाई गर्म हो रही है, क्योंकि आज के समय में कंपाइलर लेखकों ने पुराने मंत्र को गलत बना दिया है। कार्यक्रम बदतर कोई पाप नहीं है "और इसे 11 तक कर दिया।
स्टैकओवरफ्लो

2
यदि Rust में C की तरह SIMD इंट्रेंसिक्स होते हैं, तो यह लगभग एक आदर्श आधुनिक पोर्टेबल असेंबली भाषा हो सकती है। C एक पोर्टेबल असेंबली भाषा के रूप में आक्रामक UB- आधारित ऑप्टिमाइज़ेशन के कारण खराब और बदतर होता जा रहा है, और आधुनिक CPU संचालन को विफल करने में विफलता है जो आधुनिक CPUs समर्थन करते हैं (जैसे popcnt, अग्रणी / अनुगामी शून्य, बिट-रिवर्स, बाइट-रिवर्स, सैचुरेटिंग की गिनती करें) गणित)। सीवी सपोर्ट वाले सीपीयू पर इनके लिए कुशल एएसएम बनाने के लिए सी कंपाइलर प्राप्त करना अक्सर गैर-पोर्टेबल इंट्रिंसिक्स की आवश्यकता होती है। संकलक पॉपकॉंट का लक्ष्य पर होना इसके बिना मुहावर-मान्यता से बेहतर है popcnt
पीटर कॉर्ड्स

8

पुरानी और बहुत अधिक भाषाओं पर विचार करें जो C (1972) से पहले थीं:

फोरट्रान - 1957 (सी की तुलना में उच्च स्तर नहीं)

लिस्प - 1958

कोबोल - 1959

फोरट्रान IV - 1961 (सी की तुलना में बहुत अधिक स्तर नहीं)

पीएल / 1 - 1964

एपीएल - 1966

इसके अलावा आरपीजी (1959) की तरह एक मध्य स्तर की भाषा, ज्यादातर प्लगबोर्ड आधारित यूनिट रिकॉर्ड सिस्टम को बदलने के लिए एक प्रोग्रामिंग भाषा है।

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


2
यदि आप पुरानी, ​​उच्चतर भाषाओं को सूचीबद्ध करना चाहते हैं, तो LISP को न भूलें
Deduplicator

@Deduplicator - मैंने इसे सूची में जोड़ा। मैं आईबीएम मेनफ्रेम पर उपयोग किया गया था पर ध्यान केंद्रित कर रहा था, और मुझे यह याद नहीं है कि LISP लोकप्रिय है, लेकिन APL आईबीएम मेनफ्रेम (शेयरिंग कंसोल के माध्यम से) और IBM 1130 के लिए भी एक आला भाषा थी। LISP के समान, APL एक है उच्च अद्वितीय उच्च स्तरीय भाषाएं, उदाहरण के लिए, कॉनवे के जीवन के खेल को एपीएल के वर्तमान संस्करण के साथ बनाने के लिए कितना छोटा कोड लगता है: youtube.com/watch?v=a9xAKttWgP4
rcgldr

2
मैं विशेष रूप से उच्च-स्तर के रूप में आरपीजी या कोबोल की गिनती नहीं करूंगा, कम से कम COBOL-85 से पहले नहीं। जब आप COBOL की सतह को खरोंचते हैं, तो आप देखते हैं कि यह अनिवार्य रूप से बहुत उन्नत कोडांतरक मैक्रोज़ का संग्रह है। इसके साथ शुरू करने के लिए, यह दोनों कार्यों, प्रक्रियाओं और पुनरावृत्ति का अभाव है, साथ ही साथ किसी भी प्रकार की स्कूपिंग भी है। सभी भंडारण को कार्यक्रम के शीर्ष पर घोषित किया जाना चाहिए जो या तो बहुत लंबे समय तक रहने वाले या दर्दनाक चर पुन: उपयोग की ओर जाता है।
जूल

मुझे फोरट्रान IV का उपयोग करने की कुछ बुरी यादें हैं, मुझे यह याद नहीं है कि सी। की तुलना में "उच्च स्तर" की सराहना की जा रही है
डेवग जूल

@idrougge - COBOL और RPG, और मेनफ्रेम निर्देशों के सेटों में पैक्ड या अनपैक्ड BCD के लिए पूर्ण समर्थन शामिल है, जो संयुक्त राज्य अमेरिका जैसे देशों में वित्तीय सॉफ्टवेयर की आवश्यकता है। मैं संबंधित मूल संचालकों पर विचार करता हूं, जैसे "उच्च स्तर पर चलने के लिए संगत"। आरपीजी असामान्य था कि आपने कच्चे इनपुट फ़ील्ड और स्वरूपित आउटपुट फ़ील्ड और / या संचायक के बीच लिंकेज निर्दिष्ट किया था, लेकिन ऑपरेशन का क्रम नहीं, प्लगबोर्ड प्रोग्रामिंग के समान।
rcgldr

6

आपके प्रश्न का उत्तर इस बात पर निर्भर करता है कि वह किस सी भाषा के बारे में पूछ रहा है।

डेनिस रिची की 1974 सी रेफरेंस मैनुअल में वर्णित भाषा एक निम्न-स्तरीय भाषा थी, जो उच्च-स्तरीय भाषाओं की कुछ प्रोग्रामिंग सुविधा प्रदान करती थी। उस भाषा से ली गई बोलियाँ निम्न स्तर की प्रोग्रामिंग भाषाएँ हैं।

जब 1989/1990 सी मानक प्रकाशित किया गया था, हालांकि, इसने निम्न-स्तरीय भाषा का वर्णन नहीं किया था जो वास्तविक मशीनों की प्रोग्रामिंग के लिए लोकप्रिय हो गया था, लेकिन इसके बजाय एक उच्च-स्तरीय भाषा का वर्णन किया गया था - लेकिन होना आवश्यक नहीं था- -निचले स्तर की शर्तों में लागू किया गया।

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

इस अंतर को समझने के लिए, विचार करें कि रिची की भाषा और C89 कोड स्निपेट कैसे देखेगा:

struct foo { int x,y; float z; } *p;
...
p[3].y+=1;

एक ऐसे मंच पर जहाँ "char" 8 बिट्स है, "int" 16 बिट्स बिग-एंडियन है, "फ्लोट" 32 बिट्स है, और स्ट्रक्चर्स की कोई विशेष पैडिंग या संरेखण आवश्यकताओं नहीं है, इसलिए "स्ट्रक्चर फू" का आकार 8 बाइट्स है।

रिची की भाषा पर, अंतिम विवरण का व्यवहार "पी" में संग्रहीत पते को ले जाएगा, इसमें 3 * 8 + 2 [यानी 26] बाइट्स जोड़ें, और उस पते पर बाइट्स से 16-बिट मान प्राप्त करें और अगला , उस मूल्य में एक जोड़ें, और फिर उसी दो बाइट्स के लिए 16 बिट मान वापस लिखें। व्यवहार को 26 वें और 27 वें बाइट्स पर अभिनय के रूप में परिभाषित किया जाएगा, जो पता पी पर किसी भी वस्तु के लिए किस प्रकार का संग्रह किए बिना निम्नलिखित था।

सी स्टैंडर्ड द्वारा परिभाषित भाषा में, इस घटना में कि * p एक "स्ट्रक्चर फू [[] के एक तत्व की पहचान करता है, जिसका अनुसरण उस प्रकार के कम से कम तीन और पूर्ण तत्वों द्वारा किया जाता है, अंतिम विवरण एक सदस्य को y के बदले में जोड़ देगा के बाद तीसरा तत्व * पी। किसी भी अन्य परिस्थिति में व्यवहार मानक द्वारा परिभाषित नहीं किया जाएगा।

रिची की भाषा एक निम्न-स्तरीय प्रोग्रामिंग भाषा थी क्योंकि, जब यह एक प्रोग्रामर को एरोसेज और संरचनाओं जैसे अमूर्त का उपयोग करने की अनुमति देता है जब सुविधाजनक होता है, तो यह स्मृति में वस्तुओं के अंतर्निहित लेआउट के संदर्भ में व्यवहार को परिभाषित करता है। इसके विपरीत, C89 और बाद के मानकों द्वारा वर्णित भाषा एक उच्च-स्तरीय अमूर्तता के संदर्भ में चीजों को परिभाषित करती है, और केवल उस कोड के व्यवहार को परिभाषित करती है जो इसके अनुरूप है। निम्न-स्तरीय प्रोग्रामिंग के लिए उपयुक्त गुणवत्ता कार्यान्वयन मानक से अधिक मामलों में उपयोगी व्यवहार करेगा, लेकिन ऐसे उद्देश्यों के लिए उपयुक्त होने के लिए कार्यान्वयन क्या करना चाहिए, यह निर्दिष्ट करने वाला कोई "आधिकारिक" दस्तावेज़ नहीं है।

डेनिस रिची द्वारा आविष्कार की गई सी भाषा इस प्रकार एक निम्न-स्तरीय भाषा है, और इस तरह से मान्यता प्राप्त थी। सी मानक समिति द्वारा आविष्कार की गई भाषा, हालांकि, कार्यान्वयन-प्रदान की गारंटी के अभाव में कभी भी निम्न स्तर की भाषा नहीं रही है जो कि मानक के आदेशों से परे है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.