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:
- Perché non vogliono impedire a un'implementazione di scrivere un codice migliore dello standard fornito
- Perché non vogliono impedire a un'implementazione di utilizzare una lingua completamente diversa, per migliorare le prestazioni