कुछ भाषाओं पर प्रलेखन "समान" के बजाय "समतुल्य" क्यों है?


23

कुछ भाषाओं पर प्रलेखन "के बजाय" के बराबर "क्यों है?"

उदाहरण के लिए, पायथन डॉक्स कहते हैं

itertools.chain(*iterables)

...

के बराबर :

def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    for it in iterables:
        for element in it:
            yield element

या इस C ++ संदर्भ पर find_if:

इस फ़ंक्शन टेम्पलेट का व्यवहार इसके बराबर है:

template<class InputIterator, class UnaryPredicate>
  InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) return first;
    ++first;
  }
  return last;
}

यदि यह वास्तविक कोड नहीं है, तो क्या वे इसे पोस्ट नहीं कर सकते? और अगर यह वास्तविक कोड है, तो उन्हें यह क्यों कहना है कि यह "समतुल्य" है, बल्कि "केवल" है?


2
ध्यान दें कि आप जो देख रहे हैं find_ifवह C ++ के लिए "द" डॉक्यूमेंटेशन नहीं है। यदि यह था, तो कलाकारों को bool(जो आप नीचे दिए गए उत्तर में देखते हैं) गलत होगा।
मेहरदाद

3
अजगर के मामले में, यदि आप स्रोत कोड की तलाश करते हैं, तो आप पाएंगे कि chainसीधे सी में लागू किया गया है, इस प्रकार यह उस अजगर कोड के लिए "समतुल्य" है क्योंकि यह एक ही परिणाम उत्पन्न करता है, लेकिन यह इंटरप्रिटेशन के कुछ ओवरहेड से बचा जाता है बाईटकोड।
बकुरीउ १५'१६ को १०:१२

@ मेहरदाद मुझे पता है कि यह आधिकारिक दस्तावेज नहीं है, इसके सिर्फ संसाधन मैंने C ++ के विवरण को खोजने में सबसे अधिक उपयोगी पाया है
जॉन मैकक्लब

वे मानक में जो भी दृष्टिकोण निर्धारित किया गया था, उसका उपयोग करने के लिए मजबूर किया जाएगा, भले ही एक बेहतर एक उपलब्ध था।
केविन

जवाबों:


67

क्योंकि मानक लेखक वास्तव में कार्यान्वयन पर जोर नहीं देना चाहते हैं। वे यह परिभाषित करना चाहते हैं कि यह क्या करता है , लेकिन जरूरी नहीं कि यह कैसे करता है। इसलिए, उदाहरण के लिए, यदि आप GNU C ++ संस्करणfind_if को देखते हैं, तो आप देखेंगे कि कार्यान्वयन आपके द्वारा दिए गए कार्यों से थोड़ा भिन्न है, जो C ++ मानक पर आधारित है:

template<typename _InputIterator, typename _Predicate>
inline _InputIterator
__find_if(_InputIterator __first, _InputIterator __last,
    _Predicate __pred, input_iterator_tag)
{
    while (__first != __last && !bool(__pred(*__first)))
     ++__first;
       return __first;
}

यह कार्यात्मक रूप से मानक के बराबर है, लेकिन बिल्कुल समान नहीं है। यह संकलक लेखकों को लचीलापन देता है। किसी विशेष प्लेटफॉर्म के लिए इसे करने का एक बेहतर तरीका हो सकता है। कार्यान्वयनकर्ता एक अलग कोडिंग शैली का उपयोग करना चाह सकता है।

यह अजगर की तरह भाषाओं की स्क्रिप्टिंग के लिए विशेष रूप से सच है कि प्रदर्शन के कारणों के लिए कार्यान्वयनकर्ता को पूरी तरह से अलग भाषा में लागू करने का निर्णय लिया जा सकता है। उदाहरण के लिए, अजगर को लागू करने वाला कोई व्यक्ति itertools.chain(*iterables)C ++ में लिख सकता है। यह पूरी तरह से ठीक है अगर मानक "बराबर" कहता है जब तक कि कोड प्रदान किए गए अजगर के समान नहीं होता है। यदि मानक ने कहा "इसके बजाय" है, तो कार्यान्वयनकर्ताओं को या तो उस भाषा में लागू करने की आवश्यकता होगी, या मानक को पूरा नहीं करना चाहिए।

संक्षेप में:

  1. क्योंकि वे प्रदान किए गए मानक से बेहतर कोड लिखने से एक कार्यान्वयन को रोकना नहीं चाहते हैं
  2. क्योंकि वे प्रदर्शन को बेहतर बनाने के लिए कार्यान्वयन को पूरी तरह से अलग भाषा का उपयोग करने से रोकना नहीं चाहते हैं

ज्ञानवर्धक उत्तर के लिए धन्यवाद! मुझे संदेह था कि उत्तर उन पंक्तियों के साथ कुछ था।
जॉन मैकक्लब 5

@lerenard, आपको आगे स्टीवन के लिंक से find_if के पूर्ण कार्यान्वयन को पढ़ने के लिए ज्ञानवर्धक मिल सकता है। (वह जो मिला है वह वास्तव में सिर्फ एक अंश है।)
विंस्टन एवर्ट

@InstonEwert, दुर्भाग्य से मैं उस तरह के पूरी तरह से समझ कोड के स्तर पर नहीं हूं, लेकिन अंडरस्कोर का उदार उपयोग निश्चित रूप से रुचि का विषय है!
जॉन मैकक्लब

9
@lerenard: वे अतिरिक्त प्रमुख अंडरस्कोर हैं, ताकि मानक लाइब्रेरी इंटर्ल्स आपके द्वारा लिखे गए कोड के साथ हस्तक्षेप न करें (दोहरे अग्रणी अंडरस्कोर वाले नाम कंपाइलर / मानक लाइब्रेरी लेखकों द्वारा उपयोग के लिए आरक्षित हैं)।
बार्ट वैन इनगेन शनाउ

5
खैर, C और C ++ में, हमेशा की तरह-अगर-नियम है, इसलिए भले ही मानक ने इसके समकक्ष कहा हो, वास्तविक कार्यान्वयन भिन्न हो सकता है।
डेडुप्लिकेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.