web-dev-qa-db-ja.com

一部の言語のドキュメントに「is」ではなく「equivalent to」と記載されているのはなぜですか?

一部の言語のドキュメントに「is」ではなく「equivalent to」と記載されているのはなぜですか?

たとえば、 the Python Docs と言います

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++リファレンス on find_if

この関数テンプレートの動作はequivalentで次のようになります。

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

それが実際のコードではない場合、彼らはそれを投稿できませんか?そして、それが実際のコードである場合、なぜ彼らは単に「である」ではなく「同等」であると言わなければならないのですか?

23
Jon McClung

標準のライターは実際に実装を表明したくないからです。彼らはが何をするかを定義する必要がありますが、必ずしもそれを行う方法ではありません。したがって、たとえば、 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;
}
_

これは、標準の機能と機能的に同等ですが、まったく同じではありません。これにより、コンパイラの作成者に柔軟性が与えられます。特定のプラットフォームでそれを行うためのより良い方法があるかもしれません。実装者は、異なるコーディングスタイルを使用することを望む場合があります。

これは、pythonのようなスクリプト言語に特に当てはまります。実装者は、パフォーマンス上の理由から完全に異なる言語で実装することを決定する可能性があります。pythonたとえば、C++でitertools.chain(*iterables)を記述します。コードが提供されたpythonと同じである限り、標準が「同等」と言っている場合、これは完全に問題ありません。標準が「である」と言っている場合、実装者はその言語で実装するか、標準を満たさないようにする必要があります。

要約すれば:

  1. 彼らは実装が提供された標準よりも良いコードを書くのを防ぎたくないので
  2. パフォーマンスを向上させるために、実装が完全に異なる言語を使用するのを防ぎたくないため
67
Gort the Robot