Perché la documentazione su alcune lingue dice "equivalente a" anziché "è"?

22

Perché la documentazione in alcune lingue dice "equivalente a" anziché "è"?

Ad esempio, i documenti Python dicono

itertools.chain(*iterables)

...

Equivalent to:

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

Oppure questo riferimento C ++ su find_if :

The behavior of this function template is equivalent to:

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;
}

Se questo non è il codice reale, non possono postarlo? E se è il codice vero, perché devono dire che è "Equivalente" piuttosto che semplicemente "è"?

    
posta Jon McClung 15.01.2016 - 05:14
fonte

1 risposta

65

Perché gli scrittori standard non vogliono effettivamente affermare un'implementazione. Vogliono definire cosa fa , ma non necessariamente come lo fa. Quindi, per esempio, se guardi la versione GNU C ++ di find_if , vedrai che l'implementazione è leggermente diversa da quella che dai, che si basa sullo standard 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;
}

Questo è funzionalmente equivalente a ciò che lo standard ha, ma non esattamente lo stesso. Questo dà flessibilità agli scrittori di compilatori. Potrebbe esserci un modo migliore per farlo per una piattaforma particolare. L'implementatore potrebbe voler utilizzare uno stile di codifica diverso.

Questo è particolarmente vero per i linguaggi di scripting come python, in quanto l'implementatore può decidere di implementare in un linguaggio completamente diverso per motivi di prestazioni. Qualcuno che implementa python può, ad esempio, scrivere itertools.chain(*iterables) in C ++. Questo è perfetto se lo standard dice "equivalente a" purché il codice faccia lo stesso del python fornito. Se lo standard ha detto "è", allora gli implementatori sarebbero obbligati a implementare in quella lingua o non a soddisfare lo standard.

In breve:

  1. Perché non vogliono impedire a un'implementazione di scrivere un codice migliore dello standard fornito
  2. Perché non vogliono impedire a un'implementazione di utilizzare una lingua completamente diversa, per migliorare le prestazioni
risposta data 15.01.2016 - 06:04
fonte

Leggi altre domande sui tag