Warum wird in einigen Sprachen in der Dokumentation eher "gleich" als "ist" angegeben?
Zum Beispiel sagen die Python Docs
itertools.chain(*iterables)
...
Entspricht :
def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element
Oder diese C ++ Referenz auf find_if
:
Das Verhalten dieser Funktionsvorlage entspricht :
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; }
Wenn das nicht der eigentliche Code ist, können sie ihn dann nicht posten? Und wenn es sich um den tatsächlichen Code handelt, warum müssen sie dann sagen, dass er "gleichwertig" und nicht einfach "gleichwertig" ist?
c++
python
documentation
compiler
Jon McClung
quelle
quelle
find_if
ist nicht „die“ Dokumentation für C ++. Wenn ja, dann wäre die Besetzungbool
(die Sie in der Antwort unten sehen) falsch.chain
direkt in C implementiert ist. Daher ist er "äquivalent" zu diesem Python-Code, da er das gleiche Ergebnis liefert, aber es wird ein wenig Overhead bei der Interpretation vermieden Bytecode.Antworten:
Weil die Standardschreiber eine Implementierung nicht wirklich behaupten wollen. Sie wollen definieren, was es tut , aber nicht unbedingt, wie es es tut. Wenn Sie sich beispielsweise die GNU C ++ - Version von
find_if
ansehen , werden Sie feststellen, dass sich die Implementierung geringfügig von Ihren Angaben unterscheidet, die auf dem C ++ - Standard basieren:Dies ist funktional äquivalent zu dem, was der Standard hat, aber nicht genau das gleiche. Dies gibt dem Compiler-Schreiber Flexibilität. Möglicherweise gibt es einen besseren Weg, dies für eine bestimmte Plattform zu tun. Der Implementierer möchte möglicherweise einen anderen Codierungsstil verwenden.
Dies gilt insbesondere für Skriptsprachen wie Python, da der Implementierer aus Leistungsgründen möglicherweise entschieden hat, diese in einer völlig anderen Sprache zu implementieren. Jemand, der Python implementiert, kann beispielsweise
itertools.chain(*iterables)
in C ++ schreiben . Dies ist vollkommen in Ordnung, wenn der Standard "äquivalent zu" sagt, solange der Code den gleichen Vorgang wie der bereitgestellte Python ausführt. Wenn der Standard stattdessen "is" lautet, müssten Implementierer entweder in dieser Sprache implementieren oder den Standard nicht erfüllen.Zusammenfassend:
quelle