C ++ पुस्तकालयों का उपयोग इतना जटिल क्यों है?


14

सबसे पहले, मैं नोट करना चाहता हूं कि मैं सी ++ से प्यार करता हूं और मैं उन लोगों में से एक हूं जो सोचते हैं कि जावा की तुलना में सी ++ में कोड करना आसान है। एक छोटी सी बात को छोड़कर: पुस्तकालय।

जावा में आप बस निर्माण के रास्ते में कुछ जार जोड़ सकते हैं और आप काम कर रहे हैं।

C ++ में आपको आमतौर पर हेडर फ़ाइलों और लाइब्रेरी के लिए कई रास्ते सेट करने होते हैं। कुछ मामलों में, आपको विशेष बिल्ड झंडे का उपयोग भी करना होगा। मैंने मुख्य रूप से Visual Studio, Code Blocks और नो IDE का उपयोग किया है। बाहरी पुस्तकालयों का उपयोग करने के बारे में बात करते समय सभी 3 विकल्प बहुत अलग नहीं होते हैं।

मुझे आश्चर्य है कि इसके लिए कोई सरल विकल्प क्यों नहीं बनाया गया था? जैसे कि एक विशेष .zip फ़ाइल जिसमें आपके पास एक ही स्थान की आवश्यकता है सब कुछ है इसलिए IDE आपके द्वारा बिल्ड फ़्लैग स्थापित करने के लिए सभी कार्य कर सकता है। क्या इसके लिए कोई तकनीकी बाधा है?

जवाबों:


15

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


8
अंतिम पंक्ति पूरी तरह से सही नहीं है: मॉड्यूल सिस्टम 2004 (पहले दस्तावेज़) के बाद से काम में है, लेकिन इसमें इतना काम निहित है कि इसे अंतिम मानक के लिए भी परिकल्पित नहीं किया जा सकता क्योंकि इसमें कार्यान्वयन की कमी थी। प्रस्ताव का समर्थन करें। यह कार्यान्वयन अगले C ++ मानक को टार्गेट करने के लिए wortk (अन्य ड्राफ्ट के साथ) में किया गया है। ऐसा नहीं है कि यह सी ++ डिजाइनरों की प्राथमिकता नहीं है, यह सिर्फ इन विशेषताओं में से एक है जिसे आप गलत नहीं कर सकते हैं, रेट्रो-कम्फर्टेबिलिटी (अधिकांश सी कोड और सी ++ 11 के साथ) रखना है और सही तरीके से प्राप्त करना मुश्किल है। इसलिए इसमें काफी समय लगता है।
17

बहुत बढ़िया। जानकारी के लिए धन्यवाद, Klaim। इसकी जांच जरूर कराएंगे। यह बहुत ही रोमांचक है :)
पीज्यूसन

अधिकांश भाषाएं मानकीकृत लिंकेज के व्यवसाय से बाहर रहती हैं क्योंकि तंत्र ऑपरेटिंग सिस्टम के बीच भिन्न हो सकता है। जावा के रन-वे नेचर में एक विशेष लिंकेज और लाइब्रेरी फॉर्मेट को अनिवार्य करने की आवश्यकता होती है। इसमें कुछ भी गलत नहीं है, लेकिन यह कुछ ओवरहेड लाता है जो सभी मामलों में वांछनीय नहीं हो सकता है।
१०:२४ पर ब्लरफ्ल Bl

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

1
@AlexBottoni, मुझे वास्तव में संदेह है कि वे इस सदी में किसी भी समय एक मानकीकृत मॉड्यूल प्रणाली के साथ आएंगे। उन्होंने C ++ 11 में अवधारणाओं को भी शामिल नहीं किया क्योंकि वे सटीक कार्यान्वयन पर सहमत नहीं हो सकते थे। एक मॉड्यूल सिस्टम जो हेडर / लिंकर सिस्टम के साथ काम करता है और भी अधिक मुश्किल है, और हम शायद इसे बहुत लंबे समय तक नहीं देखेंगे।
चार्ल्स साल्विया

2

यह तकनीकी बाधा नहीं है। लिनक्स पर, आपकी "विशेष ज़िप फ़ाइल" एक लाइब्रेरी-डे पैकेज है जिसे आप पैकेज मैनेजर के साथ स्थापित करते हैं, और इसमें शामिल और लिंकर झंडे स्थापित करना आपके लिए कुछ जोड़े के रूप में सरल है जो चीजों को सेट करने के लिए pkg-config का configure.acउपयोग करता है ।

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

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