Почему в документации на некоторых языках написано «эквивалентно», а не «есть»?
Например, документы Python говорят
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; }
Если это не настоящий код, не могут ли они опубликовать его? И если это фактический код, почему они должны говорить, что это «Эквивалент», а не просто «есть»?
c++
python
documentation
compiler
Джон МакКлюнг
источник
источник
find_if
это не «» Документация для C ++. Если это так, то приведение кbool
(которое вы видите в ответе ниже) будет неправильным.chain
он реализован непосредственно в C, поэтому он «эквивалентен» к тому же коду Python, потому что он дает тот же результат, но избегает некоторых накладных расходов при интерпретации этого кода. байткод.Ответы:
Потому что стандартные авторы не хотят фактически утверждать реализацию. Они хотят определить, что он делает , но не обязательно, как он это делает. Так, например, если вы посмотрите на версию GNU C ++
find_if
, вы увидите, что реализация немного отличается от того, что вы даете, который основан на стандарте C ++:Это функционально эквивалентно тому, что имеет стандарт, но не совсем то же самое. Это дает авторам гибкости гибкость. Там может быть лучший способ сделать это для конкретной платформы. Разработчик может захотеть использовать другой стиль кодирования.
Это особенно верно для языков сценариев, таких как python, поскольку разработчик может решить реализовать его на совершенно другом языке по соображениям производительности. Кто-то, реализующий Python, может, например, писать
itertools.chain(*iterables)
на C ++. Это прекрасно, если стандарт говорит «эквивалентно», если код делает то же самое, что и предоставленный Python. Если в стандарте вместо этого указано «есть», то разработчики должны будут либо реализовать на этом языке, либо не соответствовать стандарту.В итоге:
источник