अधिकांश लिनक्स प्रोग्राम सी में क्यों लिखे गए हैं?


30

अधिकांश लिनक्स प्रोग्राम सी में क्यों लिखे गए हैं? वे C ++ के साथ क्यों नहीं लिखे गए, जो नया है?


14
C++की तुलना में नया है C, लेकिन यह थोड़ा अप्रासंगिक है। वे अलग-अलग भाषाएं हैं।
Mat

6
आपको शायद स्टैकऑवरफ्लो या प्रोग्रामर्स (जहां विषय वास्तव में पहले से ही कवर किया गया है ) पर यह पूछना चाहिए ।
रोज़्ज़ेट्रिजेविज़

4
@ मैट खैर, यह पूरी तरह से सही नहीं है, क्योंकि सी ++ सी का सुपरसेट है। आप सी में प्रोग्राम कर सकते हैं और इसे सी ++ कंपाइलर के साथ संकलित कर सकते हैं। यह उम्मीद के मुताबिक संकलन और काम करेगा।
पोल्मन 23

8
@ पॉलीमोन: यह गलत है, असंगतताएं हैं। en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

जवाबों:


37

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

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

इस बिंदु पर, कोई व्यक्ति पूछ सकता है "ठीक है, इसलिए कर्नेल को C में क्यों लिखा गया है और C ++ में पोर्ट नहीं किया गया है?" । कुछ समय पहले kerneltrap पर इस पर चर्चा की गई है । इस धागे से उद्धृत की जाने वाली एक अच्छी व्याख्या yoshi314 (सीधे उद्धृत करते हुए) की प्रतिक्रिया है :

ऐसा इसलिए है क्योंकि लगभग हर सी ++ ऐप को संचालित करने के लिए एक अलग सी ++ मानक पुस्तकालय की आवश्यकता होती है। इसलिए उन्हें इसे कर्नेल में पोर्ट करना होगा, और हर जगह एक अतिरिक्त ओवरहेड की उम्मीद करनी होगी।

c ++ अधिक जटिल भाषा है और इसका मतलब है कि संकलक इससे अधिक जटिल कोड बनाता है। इस वजह से, यह समझना कि एक समस्या संकलक बग से उपजी है, बजाय कोड त्रुटि सी में आसान है।

सी भाषा भी अधिक नंगे है, और इसके विधानसभा प्रतिनिधित्व का पालन करना आसान है, जो अक्सर भविष्यवाणी करना आसान है।

सी ++ अधिक बहुमुखी है, लेकिन सी लोवेल या एम्बेडेड सामान के लिए अधिक अनुकूल है।


दूसरी ओर, "अधिकांश लिनक्स प्रोग्राम" काफी भ्रामक हैं। चित्रमय अनुप्रयोगों पर एक नज़र डालें। विशेष रूप से लिनक्स पर GUI वातावरण में पायथन को अधिक से अधिक आधार मिल रहा है। उसी चीज़ के बारे में जो विंडोज और .NET के साथ हो रही है।


3
इसके अतिरिक्त C के पास स्थिर ABI है और आसानी से अन्य भाषाओं में उनके मूल FFI के माध्यम से प्लग किया जा सकता है जबकि C ++ में मानव-पठनीय ABI नहीं है और g ++ में ABI में परिवर्तन हुए थे। इसलिए पुस्तकालयों को C में लिखा जाता है, बल्कि C ++ में। क्योंकि आप चाहते हैं कि परियोजना में एक भाषा हो ताकि पुस्तकालय के साथ कार्यक्रम संपन्न हो सकें। (कम से कम वह गनोम के साथ एक कहानी थी)।
Maciej Piechotka

@MaciejPiechotka यह सब सच है, और यह एक अच्छी चर्चा है, लेकिन c में परिभाषित ABI नहीं है , सिवाय इसके कि प्रत्येक प्लेटफ़ॉर्म पर काम करने के लिए अक्सर "स्पष्ट" तरीका होता है। इसके बाद यह नेता का अनुसरण करता है।
dmckee

@ डमकी: मैंने यह नहीं कहा है कि यह मानकीकृत है, लेकिन प्रत्येक प्लेटफ़ॉर्म पर सी एपीआई कुछ सरल नियमों का पालन करता है (जिसमें नो या मिनिमल मैनिंग भी शामिल है) जो शायद ही कभी बदलता है - जो 100% सही नहीं होने पर भी इसे उपयोगी बनाता है।
मैकीज पीचोटका

2
आजकल, आप यह भी विचार कर सकते हैं कि ... * C में आप जो कुछ भी कर सकते हैं आप C ++ में भी उसी तरह से कर सकते हैं, यह भी सोचें कि "एक्सटर्नल सी" ... * कंपाइलर अधिक जटिल कोड नहीं बनाएगा यदि आप अधिक जटिल कोड नहीं लिखते हैं ... * आप C ++ में एक ही नंगे सामान को लिख सकते हैं ... * आप C से C ++ पुस्तकालयों को लिंक और उपयोग कर सकते हैं। अंत में यह काफी ऐतिहासिक मुद्दा है।
ज़रीन

7

लिनुस टॉर्वाल्ड्स से निम्नलिखित ईमेल पढ़ने के बाद लिनक्स के निर्माता। मैं यह सोचने में मदद नहीं कर सकता कि उपरोक्त उत्तर गलत है। उसे लगता है कि C ++ प्रोग्रामर अच्छे सिस्टम प्रोग्रामर नहीं हैं । और यह कि C ++ में अतिरिक्त विशेषताएं अक्सर अल्पावधि में लाए जाने वाले लाभों की तुलना में लंबी अवधि में अधिक समस्याएं पैदा करती हैं। हालांकि कोई उससे असहमत हो सकता है, लेकिन लिनक्स ऑपरेटिंग सिस्टम पर उसके प्रभाव को खत्म करना मुश्किल है।

http://harmful.cat-v.org/software/c++/linus


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