"एसटीएल" और "सी ++ मानक पुस्तकालय" में क्या अंतर है?


446

किसी ने इस लेख को मेरे ध्यान में लाया जो दावा करता है (मैं विरोधाभास कर रहा हूं) एसटीएल शब्द का उपयोग उन भागों के बजाय पूरे सी ++ मानक पुस्तकालय को संदर्भित करने के लिए किया जाता है जो एसजीआई एसटीएल से लिए गए थे।

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

C ++ Standard Library के हिस्से STL के कुछ हिस्सों पर आधारित थे, और यह वो हिस्से हैं, जिन्हें बहुत से लोग (कई लेखकों और कुख्यात त्रुटि वाले cplusplus.com सहित) अभी भी "STL" के रूप में संदर्भित करते हैं। हालाँकि, यह गलत है; वास्तव में, C ++ मानक में कभी भी "STL" का उल्लेख नहीं किया गया है, और दोनों के बीच सामग्री अंतर हैं।

(...) "STL" शायद ही कभी stdlib के बिट्स को संदर्भित करने के लिए उपयोग किया जाता है जो SGI STL पर आधारित होते हैं। लोगों को लगता है कि यह संपूर्ण मानक पुस्तकालय है। यह सीवी पर लगाया जाता है। और यह भ्रामक है।

मैं शायद ही सी ++ के इतिहास के बारे में कुछ भी जानता हूं इसलिए मैं लेख की शुद्धता का न्याय नहीं कर सकता। क्या मुझे एसटीएल शब्द का उपयोग करने से बचना चाहिए? या यह एक अलग राय है?


62
लोगों को चीजों का वर्णन करने के लिए अच्छे नामों की आवश्यकता होती है। Stepanov की प्रतिभा ने हमारे कार्यक्रम के तरीके को बदल दिया। "मानक पुस्तकालय प्रोग्रामिंग" जैसे नाम का वर्णन करना बिल्कुल बेकार है। इसे "stl प्रोग्रामिंग" कहें और हर कोई जानता है कि आपका क्या मतलब है। इस बारे में तर्क देना कि बस बात याद आती है: हमें एक अच्छे नाम की आवश्यकता है।
हंस पासेंट

34
@ हंस: नहीं, आप इस बिंदु को याद करते हैं: " हर कोई जानता है कि आपका क्या मतलब है" यह सच नहीं है
हल्की दौड़ ऑर्बिट

16
मुझे कोई मतलब नहीं है कि आपका क्या मतलब है।
हंस पैसेंट

21
यहाँ पर किसी ऐसे व्यक्ति का एक आदर्श उदाहरण है जो "CL" का उपयोग करके पूरे C ++ Standard Library को संदर्भित करता है। यह मुझे चकित करना जारी रखता है कि इतने सारे लोग अंधे कसम खाते हैं कि कोई भी कभी भी ऐसा नहीं करता है, जब यह लगभग दैनिक आधार पर देखने के लिए सादे है।
१०:२ in पर ऑर्बिट

जवाबों:


571

सी ++ के मानकीकृत होने से बहुत पहले के दिनों में "एसटीएल" अलेक्जेंडर स्टेपानोव द्वारा लिखा गया था। C ++ 80 के दशक से अस्तित्व में था, लेकिन जिसे अब हम " C ++ " कहते हैं " कहते हैं, वह ISO / IEC 14882: 2014 (और इससे पहले के संस्करण, जैसे ISO / IEC 14882: 2011) में मानकीकृत भाषा है।

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

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

मूल एसटीएल को अब अक्सर "C ++ स्टैण्डर्ड टेम्प्लेट लाइब्रेरी का कार्यान्वयन" कहा जाता है (बल्कि वास्तविक इतिहास को पीछे की ओर?), उसी तरह से कि आपका Microsoft Visual Studio या GCC जहाजों को C ++ स्टैण्डर्ड लाइब्रेरी का कार्यान्वयन करता है। लेकिन "मानक टेम्पलेट लाइब्रेरी" और "मानक लाइब्रेरी" एक ही बात नहीं हैं।

लड़ाई इस बारे में है कि क्या वर्तमान मानक लाइब्रेरी को पूरे या आंशिक रूप से "एसटीएल" कहा जाना चाहिए, और / या यह मायने रखता है कि इसे क्या कहा जाता है।

"एसटीएल" के लिए

विचार का एक स्कूल है जो कहता है कि हर कोई अब जानता है कि "एसटीएल" का मतलब मानक पुस्तकालय है, जैसे कि अब हर कोई जानता है कि "सी ++" आईएसओ-मानकीकृत भाषा है।

इसमें वे लोग भी शामिल हैं जो मानते हैं कि यह वास्तव में मायने नहीं रखता में तब तक जब तक सभी पक्षों को यह समझ नहीं आता कि किस बारे में बात की जा रही है।

यह एक शब्द है जो जानवर की प्रकृति से और भी अधिक प्रचलित है, जिसमें से अधिकांश "++" के रूप में ज्ञात C ++ सुविधा का भारी उपयोग करता है।

"C ++ स्टैंडर्ड लाइब्रेरी" (या stdlib) के लिए

हालांकि, विचार का एक और स्कूल है - जिसे मैं सदस्यता देता हूं - जो कहता है कि यह भ्रामक है। पहली बार C ++ सीखने वाले लोग ऐसा नहीं करते हैं इस अंतर को जानते हैं, और छोटी भाषा के अंतर को नोटिस नहीं कर सकते हैं।

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

इसके अलावा, कुछ एसटीएल जैसे पुस्तकालय हैं जो वास्तव में मूल एसटीएल के कार्यान्वयन हैं, न कि सी ++ मानक पुस्तकालय। कुछ समय पहले तक, STLPort उनमें से एक था (और वहां भी, भ्रम समाप्त हो गया !)।

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

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

निष्कर्ष

मैं सराहना करता हूं कि यह पोस्ट थोड़ा सा पक्षपाती रहा है: मैंने वह लेख लिखा है जिससे आप जुड़े हुए हैं। :) वैसे भी, मुझे उम्मीद है कि यह लड़ाई को थोड़ा बेहतर ढंग से समझाने में मदद करता है।

अपडेट 13/04/2011

यहाँ पर किसी ऐसे व्यक्ति के तीन आदर्श उदाहरण हैं जो पूरे C ++ Standard Library को संदर्भित करने के लिए "STL" का उपयोग कर रहा है। यह मुझे चकित करना जारी रखता है कि इतने सारे लोग अंधा कसम खाते हैं कि कोई भी कभी भी ऐसा नहीं करता है, जब यह लगभग दैनिक आधार पर देखने के लिए सादे है।


136
एस tandard टी emplate एल ibrary केवल द्वारा नहीं बनाया गया सेंट epanov और एल ee, लेकिन वे भी पर काम कर रहे थे एस oftware टी echnology एल समय में aboratory।
क्रैगन जेवियर सीटेकर

21
आज किसी ने पूछा कि हेडर क्या std::iotaहै, क्योंकि वह काम करने के लिए नहीं मिल सकता है। यह एक SGI गैर-मानक एक्सटेंशन है , जिसे वे "मानक" कहते हैं, जब यह उनके अनुरूप होता है क्योंकि यह "STL" है, और हर कोई जानता है कि "STL" C ++ मानक लाइब्रेरी का हिस्सा है, है ना? और इसे C ++ 0x में पेश किया गया था, लेकिन C ++ 03 में उपलब्ध नहीं है। गरर।
in

40
और MS STL का रखरखाव S tephan T द्वारा किया जाता है । एल अववेज, उर्फ ​​एसटीएल।
मिहैला


26
Bjarne Stroustrup विशेष रूप से "कैनन", C ++ प्रोग्रामिंग लैंग्वेज 4th संस्करण में मानक लाइब्रेरी के अन्य हिस्सों से STL को अलग करता है।
कोडेनहेम

84

कोई एक जवाब नहीं है जो वास्तव में सही है। अलेक्जेंडर स्टेपानोव ने एक पुस्तकालय विकसित किया जिसे उन्होंने एसटीएल (उस समय एचपी के लिए काम करना) कहा। उस लाइब्रेरी को C ++ मानक में शामिल करने का प्रस्ताव दिया गया था।

वह मूल रूप से "कांटेक्ट" विकास है। समिति में कुछ हिस्से शामिल थे, दूसरों को पूरी तरह से खारिज कर दिया, और कुछ को फिर से डिजाइन किया (सिकंदर की भागीदारी के साथ)। मूल पुस्तकालय का विकास बाद में सिलिकॉन ग्राफिक्स में स्थानांतरित कर दिया गया था, लेकिन सी ++ मानक पुस्तकालय से अलग जारी रहा।

बाद उन टुकड़ों मानक पुस्तकालय में जोड़ा गया था, मानक पुस्तकालय के कुछ अन्य भागों क्या जोड़ा गया है के साथ बेहतर फिट करने के लिए संशोधित किया गया है (जैसे, begin, end, rbeginऔर rendकरने के लिए जोड़ा गया था std::stringतो यह एक कंटेनर की तरह इस्तेमाल किया जा सकता है)। लगभग उसी समय, अधिकांश पुस्तकालय (यहां तक ​​कि टुकड़े जो पूरी तरह से थे असंबंधित थे) को विभिन्न प्रकारों (जैसे, मानक धाराओं) को समायोजित करने के लिए टेम्पलेट्स में बनाया गया था।

कुछ लोग एसटीएल को "स्टैण्डर्ड लाइब्रेरी" के संक्षिप्त रूप के रूप में भी उपयोग करते हैं।

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

दुर्भाग्य से, भ्रम की स्थिति निरंतर रहने की संभावना है। C ++ मानक लाइब्रेरी में कंटेनर, पुनरावृत्तियों और एल्गोरिदम की तुलना में "STL" को संदर्भित करना अधिक सुविधाजनक है, लेकिन इसमें std::stringकंटेनर की तरह कार्य कर सकते हैं, भले ही शामिल न हों। भले ही "सी ++ मानक पुस्तकालय" उतना लंबा और अनाड़ी न हो, लेकिन "एसटीएल" अभी भी बहुत छोटा और सरल है। जब तक या जब तक कोई व्यक्ति ऐसी शर्तों को लागू नहीं करता है जो अधिक सटीक हैं (जब आवश्यक हो), और बस सुविधाजनक के रूप में, "एसटीएल" का उपयोग किया जाता रहेगा और भ्रम का परिणाम जारी रहेगा।


5
@ जेरी: पूर्व; यही "एसटीडी" के लिए खड़ा है। :)
ऑर्बिट

6
@ जेरी: सुनिश्चित नहीं है कि इसमें नाम स्थान कहां से आए। आज्ञाकारी कार्यान्वयन नामस्थान में कुछ भी नहीं जोड़ते हैं std। मैं "stdlib" में "std" के बारे में बात कर रहा था, जो "मानक" के लिए खड़ा है। मुझे लगता है कि यह बहुत स्पष्ट है कि इसका क्या मतलब है!
हल्की

3
@ जेरी: मुझे वास्तव में नहीं लगता कि किसी को "मानक में" विशेषण "मानक" को पढ़ने की उम्मीद है। इस बीच, 17.4.3.1/1 काफी स्पष्ट है कि stdकुछ विशिष्ट नामित मामलों को छोड़कर, नामस्थान में चीजों को जोड़ना यूबी है: इसके अलावा इन मामलों को मानक में नामित किया गया है, और इस तरह अभी भी पूरी तरह से अनुपालन कर रहे हैं; "मानक" अभी भी लागू होगा।
ऑर्बिट

1
यहाँ SGI और HP का इतिहास पीछे की ओर है। स्टेपनोव एचपी में था इससे पहले कि वह एसजीआई में था।
क्रैगन जेवियर सीटेकर

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

52

"एसटीएल" या "मानक टेम्पलेट लाइब्रेरी" शब्द आईएसओ 14882 सी ++ मानक में कहीं भी दिखाई नहीं देता है। इसलिए एसटीएल के रूप में सी ++ मानक पुस्तकालय का जिक्र गलत है। शब्द "C ++ मानक पुस्तकालय" या "मानक पुस्तकालय" वह है जो आधिकारिक तौर पर ISO 14882 द्वारा उपयोग किया जाता है:

आईएसओ 14882 C ++ मानक:

17 - पुस्तकालय परिचय [lib.library]:

  1. यह खंड सी ++ मानक पुस्तकालय की सामग्री का वर्णन करता है कि कैसे एक अच्छी तरह से गठित सी ++ कार्यक्रम पुस्तकालय का उपयोग करता है, और एक अनुरूप कार्यान्वयन कैसे पुस्तकालय में संस्थाओं को प्रदान कर सकता है।

...

STL मूल रूप से C ++ मानक से स्वतंत्र अलेक्जेंडर स्टेपानोव द्वारा डिजाइन की गई एक लाइब्रेरी है। हालांकि, सी ++ मानक पुस्तकालय के कुछ घटकों की तरह एसटीएल घटक शामिल हैं vector, listऔर इस तरह एल्गोरिदम copyऔरswap

लेकिन निश्चित रूप से सी ++ मानक में एसटीएल के बाहर बहुत अधिक चीजें शामिल हैं, इसलिए "सी ++ मानक पुस्तकालय" शब्द अधिक सही है (और वास्तव में मानकों के दस्तावेजों द्वारा उपयोग किया जाता है)।


5
+1। हालाँकि, STL में, कोई stdनामस्थान (IIRC) नहीं था ।
ऑर्बिट

1
उस समय, अधिकांश C ++ कंपाइलर नेमस्पेस लागू नहीं किया था। वास्तव में, मुझे नहीं पता कि वे मानक में भी थे या नहीं।
क्रैगन जेवियर सीटेकर

3
@ क्रैगन: ठीक है, कोई मानक नहीं था।
ऑर्बिट

3
ओह। वैसे, स्ट्रॉस्ट्रुप द्वारा कुछ किताबें थीं, लेकिन मुझे लगता है कि यह एक ही बात नहीं है, है?
क्रैगन जेवियर सिटेकर

23

मैंने हाल ही में यह तर्क दिया है, लेकिन मेरा मानना ​​है कि थोड़ी सहनशीलता की अनुमति दी जा सकती है। अगर स्कॉट मेयर्स वही गलती करते हैं, तो आप अच्छी कंपनी में हैं।


@Tomalak & @Mark: वास्तव में स्कॉट -1मुझसे नहीं मिलता है। पुस्तक वास्तव में एसटीएल के बारे में है जिसका अर्थ है "स्टेपानोव के पुस्तकालय से उपजी एसटीएल के हिस्से"। टीओसी पुस्तकों के माध्यम से देखने के लिए समय निकालें। मूल एसटीएल के बाहर एक ही चीज़ मुझे मिल सकती थी std::string, और वह थी एक पूर्ण विकसित एसटीएल कंटेनर।
sbi

@ एसबीआई: आपने स्पष्ट रूप से मेरी स्थिति की गलत व्याख्या की है। मैं स्कॉट के तरीके से "एसटीएल" का उपयोग नहीं करता। कृपया मेरा उत्तर पढ़ें।
ऑर्बिट

6
@ टोमलाक, मैं उस तरीके से "एसटीएल" का उपयोग नहीं करूंगा, हालांकि मैं अतीत में शायद इसका दोषी हूं। मुझे नहीं लगता कि यह लोगों की पिटाई करने लायक है।
मार्क रैनसम

1
कि मैं सम्मान कर सकूं। मुझे उन लोगों के बारे में सबसे अधिक संदेह है जो संभावित अस्पष्टता को स्वीकार करने से इनकार करते हैं। :)
को ऑर्बिट

11
आप Bjarne Stroustrup - Ref की कंपनी में भी होंगे। जैसे। stroustrup.com/DnE2005.pdf : "STL (" मानक टेम्पलेट लाइब्रेरी "; अर्थात, ISO C ++ मानक पुस्तकालय के कंटेनर और एल्गोरिथ्म ढाँचा)"
Sander De Dycker

7

से जीएनयू स्टैंडर्ड सी ++ लाइब्रेरी (libstdc ++) पूछे जाने वाले प्रश्न :


एसटीएल (स्टैंडर्ड टेम्प्लेट लाइब्रेरी) सी ++ स्टैंडर्ड लाइब्रेरी के बड़े हिस्से के लिए प्रेरणा थी, लेकिन शर्तें विनिमेय नहीं हैं और उनका मतलब एक ही बात से नहीं है। C ++ Standard Library में बहुत सारी चीज़ें शामिल हैं जो STL से नहीं आईं, और उनमें से कुछ भी टेम्पलेट नहीं हैं, जैसे std::localeऔरstd::thread

Libstdc ++ - v3 में SGI STL से बहुत सारे कोड शामिल हैं (अंतिम विलय रिलीज 3.3 से था )। Libstdc ++ के कोड में मूल SGI कोड की तुलना में कई सुधार और परिवर्तन होते हैं।

विशेष रूप से, stringएसजीआई से नहीं है और उनके "रस्सी" वर्ग का कोई उपयोग नहीं करता है (हालांकि इसे वैकल्पिक विस्तार के रूप में शामिल किया गया है), न तो valarrayऔर न ही कुछ अन्य। जैसी कक्षाएंvector<> SGI से थे, लेकिन बड़े पैमाने पर संशोधित किए गए हैं।

Libstdc ++ के विकास के बारे में अधिक जानकारी एपीआई विकास और पीछे की संगतता पर पाई जा सकती है प्रलेखन में ।

पूछे जाने वाले प्रश्न SGI की एसटीएल के लिए अभी भी पढ़ने की सिफारिश की है।


FYI करें, मार्च 2018 तक भी आधिकारिक STL वेब साइट www.sgi.com/tech/stl/ चला गया है

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